NodeJS(快速)服务器定期重新启动

我在DigitalOcean上有一个简单的NodeJS应用程序。 由于某些原因,我找不到,应用程序几乎每天都停止。 发生的时间也是非常准确的,大约08:30 AM。

我检查了DigitalOcean主机没有被重新启动。 它的正常运行时间是几个星期。 我添加了一些未捕获的exception处理程序,希望有一些崩溃的应用程序,但没有logging:

process.on('uncaughtException', function (err) { console.error((new Date).toUTCString() + ' uncaughtException:', err.message); console.error(err.stack); process.exit(1); }); 

服务器一直由UptimeRobot监视,直到在日志中看到的“崩溃”,它正常工作,最后一次logging的请求是UptimeRobot发送的请求。

我有另外一台服务器configuration不同的环境,它的configuration几乎相同,而且更糟的是,它每天大概下降三次。

而上述看起来不像服务器工作负载。 每天重启三次的function用于一些function检查,所以几乎没有使用。

而现在我卡住了。 我不知道如何解决这个问题。

下面你可以find我用来启动服务器的脚本:

 #!/bin/sh set -e ### BEGIN INIT INFO # Provides: myapp-server # Required-Start: $remote_fs $syslog $network # Required-Stop: $remote_fs $syslog $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: MyApp backend server ### END INIT INFO [ -f /etc/default/myapp-server ] && . /etc/default/myapp-server user="myapp" dir="/home/$user/web-server/repository/backend" cmd="node app.js" name="myapp-server" pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err" get_pid() { cat "$pid_file" } is_running() { [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1 } case "$1" in start) if is_running; then echo "Already started" else echo "Starting $name" cd "$dir" #sudo -E -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & $cmd >> "$stdout_log" 2>> "$stderr_log" & echo $! > "$pid_file" if ! is_running; then echo "Unable to start, see $stdout_log and $stderr_log" exit 1 fi fi ;; stop) if is_running; then echo -n "Stopping $name.." kill `get_pid` for i in {1..10} do if ! is_running; then break fi echo -n "." sleep 1 done echo if is_running; then echo "Not stopped; may still be shutting down or shutdown may have failed" exit 1 else echo "Stopped" if [ -f "$pid_file" ]; then rm "$pid_file" fi fi else echo "Not running" fi ;; restart) $0 stop if is_running; then echo "Unable to stop, will not attempt to start" exit 1 fi $0 start ;; status) if is_running; then echo "Running" else echo "Stopped" exit 1 fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0 

这里是我的软件包列表:

 { "name": "MyApp", "version": "0.0.1", "description": "Sample description", "author": "Me", "private": true, "scripts": { "start": "node app.js" }, "engines": { "node": "0.10.33", "npm": "1.4.28" }, "dependencies": { "bluebird": "^2.9.8", "bookshelf": "^0.7.9", "cors": "^2.7.1", "express": "3.4.8", "jade": "*", "knex": "^0.7.3", "libphonenumber": "0.0.9", "node-uuid": "^1.4.3", "node.extend": "^1.1.3", "nodemailer": "^1.3.4", "pg": "^4.2.0", "request": "^2.53.0", "ssl-root-cas": "^1.1.7", "xmlbuilder": "^2.6.1", "xoauth2": "^1.0.0" } } 

更新:与PM2一起部署

我已经与PM2部署了应用程序,没有从日志中得到更多的东西。 服务器崩溃之前的示例:

 HEAD / 302 5ms - 112b HEAD / 302 3ms - 112b HEAD / 302 5ms - 112b HEAD / 302 2ms - 112b HEAD / 302 12ms - 112b HEAD / 302 3ms - 112b GET /tmUnblock.cgi 400 1286ms - 1.14kb GET / 302 9ms - 62b HEAD / 302 6ms - 112b HEAD / 302 11ms - 112b Environment: development Express server listening on port 3001 HEAD / 302 20ms - 112b HEAD / 302 10ms - 112b HEAD / 302 10ms - 112b HEAD / 302 2ms - 112b HEAD / 302 3ms - 112b HEAD / 302 2ms - 112b HEAD / 302 7ms - 112b HEAD / 302 2ms - 112b 

没有什么可疑的,只是通过缺lesstmUnblock.cgi安全漏洞的尝试。

什么样的VPS是你明智的运行RAM? 还有什么其他进程在服务器上运行。 我有一个与Node(无关)的问题,它会随机停止工作,没有日志logging。 这个问题变成了内存使用。 我build议检查你的内存使用情况

 free -m 

此外,我会确保你有一个交换启用缓解内存问题,如果是这样的话。 假设你在Ubuntu上,本教程将指导你创buildswap。 谷歌search如何与DO创build交换提供了许多结果

希望这可以帮助