This is pretty hacky but it's worked beautifully so far: I wrote a Ruby script that tries to load my page. If it fails, it restarts the server. This is run in a cron job every minute. Here's my code:
require 'net/http'
begin
print "Downloading the page..."
res = Net::HTTP.start("yourdomainhere.com", :read_timeout => 5)
res.get('/')
puts " success!"
rescue Net::ReadTimeout => e
print " failed.\n\nRestarting the server..."
`./nodebb restart`
puts " success!"
end
Until the cause of this is figured out, this or something like it might be a good enough workaround. It sure beats me manually restarting it after my users throw a fit.