I'm trying to get monerod up and running on a VPS with 1gb of RAM. My understanding is that once the chain is synced, monerod's memory usage should be quite reasonable. However, during the initial blockchain sync process, it is outgrowing the 1gb limit.

A search on here and on reddit turned up a recommendation to use ulimit. However, when I type: ulimit -v 1000000 to constrain the virtual memory to 1gb of RAM, monerod won't even start, complaining that there isn't enough memory to do its initial allocation.

1gb of RAM is supposed to be within the minimal requirements for Monero, so what is the correct way to constrain memory usage?

  • The new version,, helps a bit with memory usage, but it doesn't totally solve the problem. Even after the blockchain is totally synced, monerod quickly runs afoul of the 1gb RAM limit when a wallet connects to the server that is behind and needs to download several thousand blocks. So the question remains: Is there a way to force monerod to stay within the 1gb RAM limit? – puzzler Sep 8 '17 at 5:45
  • maybe you can use cgroups or timeout, mentioned here: unix.stackexchange.com/questions/44985/… – ITwrx Jan 27 '18 at 3:20

During sync, Monero will add chunks of 200 blocks at a time. The speedup gained from this quickly goes into diminishing returns as the chunk size grows, but the memory usage grows linearly, so it's possible to decrease that chunk size with the --block-sync-size N parameter. A plausible value for N is 20 instead of 200, and the speed will be similar (if you're memory starved, it could even be faster since your machine might stop swapping if it was doing so with the defaults).

  • I've tried as low as --block-sync-size 1, and it still uses more than 1gb of RAM. Is there any way to force monerod to stay within a certain memory usage? – puzzler Aug 8 '17 at 19:49
  • Does it really need it, though ? Monerod mmaps the blockchain, and will use as much RAM as is available, but does not need it per se. If other programs need RAM, that mmaped data will be given to other programs. --block-sync-size will decrease the "really needed" amount, but monerod will still eat up what it can in a reversible way. – user36303 Aug 8 '17 at 20:54
  • This "use as much RAM as available" is the crux of the problem. In practice, what happens is that it uses more than the 1gb of RAM permitted by my VPS, and then the VPS kills the monerod process. I need some way to communicate to monerod not to use more than 1gb of RAM. One post recommended using ulimit, but when I use ulimit to set the virtual memory to 1gb of RAM, monerod won't even start up, saying it doesn't have enough memory to do its initial allocation. This flies in the face of the claim that 1gb of RAM should be sufficient. – puzzler Aug 8 '17 at 23:56
  • Sure, because monerod needs maybe 20 to 40 GB of virtual memory, with the current database. – user36303 Aug 9 '17 at 8:37
  • So is there something I should be limiting other than "virtual memory" via ulimit or via some other mechanism in order to get monerod to run in 1GB? – puzzler Aug 9 '17 at 18:21

Your Answer

