1) What are the actual memory requirements for geth?
It depends of the --syncmode
of your node :
light < 380 MB (like btc, ltc, ...) but if you do that you will not have dag verification and not full contract suport so someone can make you fake coin by just creating a contract and say to you this contract add to your balance 2 ether, ... the 512mb on rinkeby ins't update
fast 1GB - 2GB
full 2GB - 4GB
archive 2GB - 8GB
src : https://www.rinkeby.io/#geth
2) What is the best way to limit its usage? (ulimit, for example, uses ENOENT which causes out of memory panics in geth, not very helpful)
the --syncmode
--cache
--ethash.cache...
argv
PS : Go on the rinkeby web site (https://www.rinkeby.io/#geth) for see good preconfiguration (just remove all about rinkeby like --networkid=4 --datadir=$HOME/.rinkeby --ethstats='yournode:Respect my [email protected]' --bootnodes=enode://a24ac7c5484ef4ed0c5eb2d36620ba4e4aa13b8c84684e1b4aab0cebea2ae45cb4d375b77eab56516d34bfbd3c1a833fc51[email protected]:30303?discport=30304
)