Ubuntu
Sinatra + Thin 的 Systemd 服務不斷重啟
我為在 Nginx 反向代理後面執行瘦伺服器的 Sinatra 應用程序提供了 systemd 服務。它工作正常,但因為它接收大量流量,我看到很多關於無法連接到上游的 nginx 錯誤。在檢查該服務後,我注意到它永遠不會執行很長時間,最多只執行幾分鐘,這可以解釋為什麼 Nginx 無法連接很多次(在服務重新啟動時)。
查看服務的輸出,
journalctl
我看到了很多:Dec 20 22:09:48 cs2092 systemd[1]: Started My app web site. Dec 20 22:10:59 cs2092 bundle[11576]: pure virtual method called Dec 20 22:10:59 cs2092 bundle[11576]: terminate called without an active exception Dec 20 22:10:59 cs2092 systemd[1]: my-service.service: Main process exited, code=killed, status=6/ABRT Dec 20 22:10:59 cs2092 systemd[1]: my-service.service: Failed with result 'signal'. Dec 20 22:10:59 cs2092 systemd[1]: my-service.service: Service hold-off time over, scheduling restart. Dec 20 22:10:59 cs2092 systemd[1]: my-service.service: Scheduled restart job, restart counter is at 7. Dec 20 22:10:59 cs2092 systemd[1]: Stopped My app web site. Dec 20 22:10:59 cs2092 systemd[1]: Started My app web site. Dec 20 22:11:19 cs2092 bundle[11828]: pure virtual method called Dec 20 22:11:19 cs2092 bundle[11828]: terminate called without an active exception Dec 20 22:11:19 cs2092 systemd[1]: my-service.service: Main process exited, code=killed, status=6/ABRT Dec 20 22:11:19 cs2092 systemd[1]: my-service.service: Failed with result 'signal'. Dec 20 22:11:19 cs2092 systemd[1]: my-service.service: Service hold-off time over, scheduling restart. Dec 20 22:11:19 cs2092 systemd[1]: my-service.service: Scheduled restart job, restart counter is at 8. Dec 20 22:11:19 cs2092 systemd[1]: Stopped My app web site. Dec 20 22:11:19 cs2092 systemd[1]: Started My app web site. Dec 20 22:14:28 cs2092 bundle[11968]: pure virtual method called Dec 20 22:14:28 cs2092 bundle[11968]: terminate called without an active exception Dec 20 22:14:28 cs2092 systemd[1]: my-service.service: Main process exited, code=killed, status=6/ABRT Dec 20 22:14:28 cs2092 systemd[1]: my-service.service: Failed with result 'signal'. Dec 20 22:14:28 cs2092 systemd[1]: my-service.service: Service hold-off time over, scheduling restart. Dec 20 22:14:28 cs2092 systemd[1]: my-service.service: Scheduled restart job, restart counter is at 9. Dec 20 22:14:28 cs2092 systemd[1]: Stopped My app web site. Dec 20 22:14:28 cs2092 systemd[1]: Started My app web site.
看起來該應用程序經常被殺死?為什麼會這樣?
這是服務:
[Unit] Description=My app web site Documentation=https://myapp.com After=network.target [Service] Type=simple WorkingDirectory=/var/www/my-app Environment="RACK_ENV=production" ExecStart=/usr/local/bin/bundle exec /usr/local/bin/thin -R /var/www/my-app/config.ru -p 6903 --max-conns 15360 --max-persistent-conns 2048 --threaded --debug start ExecStop=/usr/local/bin/bundle exec /usr/local/bin/thin -R /var/www/my-app/config.ru -p 6903 stop ExecReload=/usr/local/bin/bundle exec /usr/local/bin/thin -R /var/www/my-app/config.ru -p 6903 --max-conns 15360 --max-persistent-conns 2048 --threaded --debug restart Restart=on-failure User=julien [Install] WantedBy=multi-user.target
另一件事我不明白,正如您從我啟動 Sinatra 的服務中看到的那樣
--max-conns 15360
,但在journalctl
輸出中我可以看到最大連接數設置為 1024:Dec 21 10:24:24 cs2092 bundle[21058]: Starting my-app in production... Dec 21 10:24:24 cs2092 bundle[21058]: 2021-12-21 10:22:30 +0000 Thin web server (v1.8.1 codename Infinite Smoothie) Dec 21 10:24:24 cs2092 bundle[21058]: 2021-12-21 10:22:30 +0000 Debugging ON Dec 21 10:24:24 cs2092 bundle[21058]: 2021-12-21 10:22:30 +0000 Maximum connections set to 1024 Dec 21 10:24:24 cs2092 bundle[21058]: 2021-12-21 10:22:30 +0000 Listening on 0.0.0.0:6903, CTRL+C to stop
知道發生了什麼嗎?
注意:Ubuntu 18.04.4
所以看起來問題出在瘦伺服器上,一旦我用 Puma 替換它,所有問題都消失了。