The recommended IPFS implementation is [go-ipfs](https://github.com/ipfs/go-ipfs), version 0.12 or higher. Normally go-ipfs requires at least 2 GB RAM, but after tweaking it can run on a machine with only 512 MB.
When go-ipfs starts, its memory usage is around 100 MB and then it slowly increases. To keep memory usage within reasonable bounds the service needs to be restarted regularly.
This can be achieved by using systemd process supervison features:
```
[Unit]
Description=InterPlanetary File System (IPFS) daemon
[Service]
ExecStart=/usr/local/bin/ipfs daemon
User=ipfs
Group=ipfs
# Terminate service every 20 minutes and restart automatically
RuntimeMaxSec=1200
Restart=on-failure
# Specify the absolute limit on memory usage
# If memory usage cannot be contained under the limit, out-of-memory killer is invoked