After a couple of outages caused by RAM starvation, I decided to move the site to a larger VM on Azure until I sorted out what was going on. I resisted doing that over the past year for a number of reasons (not the least of which was that having to maintain something outside Azure allowed me to do some informal benchmarking), but it was kind of pointless to have free compute resources as a perk and not take advantage of them somehow.
So far everything points to the Linux Dropbox client being at fault1 – even in the new, 2GB RAM machine (an A1v2 in West Europe), the current version balloons out well into the hundreds of megabytes, so I’m guessing it was starving out everything else in the 512MB DigitalOcean droplet I was using.
Since I find it completely ludicrous that Dropbox takes up 650MB of RAM to sync a paltry 25.000 files (only 7.500 of which are actual posts, with the rest being image assets), I’m planning on rolling my own (one-way) Dropbox client in due course – since I already had a fair amount of working code back when I tried porting my old blog engine to Google App Service, that seems pretty straightforward, although Dropbox‘s API call limits might be a challenge2.
In the meantime, the migration was a great incentive to finish the Ansible script I started hacking away at last year. I can now provision a new VM and redeploy this site within minutes (except content syncing via Dropbox), and all I need to do manually is binding the Dropbox instance and updating DNS.
I will be moving the site to another machine in a US region soon to get it closer to the bulk of my regular audience, but downtime should be essentially zero – even despite CloudFlare’s recent issues, I intend to keep using them because I have zero security concerns regarding this site, but I also want to fool around with other things (including moving it to both AWS and Google for a few months, again to do some benchmarking).
As to everything else that’s been going on, I intend to resume writing more regularly fairly soon.
In case you’re just tuning in, I author this site as a set of documents on Dropbox (which is the only thing that is supported across all my devices and editing tools), and I run a headless Dropbox client on the server (with a separate, free account) to sync content across. ↩︎