Start Ghost through NPM and it will eat up your memory

Somewhat recently I reduced the size of the virtual machine in which I host this blog. It is quite short on memory, but for the price I pay, can't really complain.

Just now I was looking on memory usage on the machine, and noticed ps reporting over 100MB being help by npm:

andre@webserver ~]$ ps aux --sort -rss  
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  
ghost      247  0.0 23.2 1328872 117468 ?      Sl   Jun06   2:58 node index.js  
ghost      199  0.0  7.5 1031804 37868 ?       Ssl  Jun06   0:00 npm  
root       152  0.0  3.5  77340 17868 ?        Ss   Jun06   0:08 systemd-journald  

As you can see, only about 38 MB is actually in RAM (RSS), the rest (VSZ) is either shared libs or in the swap. As you can see by the relative memory usage, I don't have that much, so why not free those forty megabytes that are not really necessary?

I was starting Ghost by calling npm start --production, which simply calls node on the index.js file. Easy enough to update my systemd service file:

--- a/ghost.service
+++ b/ghost.service
@@ -5,7 +5,8 @@ After=network.target
 [Service]
 WorkingDirectory=/var/www/ghost
 Environment=GHOST_NODE_VERSION_CHECK=false
-ExecStart=/usr/bin/npm start --production
+Environment=NODE_ENV=production
+ExecStart=/usr/bin/node /var/www/ghost/index.js
 User=ghost
 Restart=always
 RestartSec=10