nGinx 不斷關閉

nGinx 不斷關閉

nginx進程不斷自行關閉,錯誤如下

2023/04/18 11:47:29 [alert] 11073#0: worker process 11312 exited on signal 9
2023/04/18 11:47:29 [alert] 11073#0: fork() failed while spawning "worker process" (12: Cannot allocate memory)
2023/04/18 11:47:29 [alert] 11073#0: could not respawn worker process

我知道它有足夠的內存,這是我控制的 VPS,我已經將其內存提升到 4GB,但仍然是同樣的情況。這是一個非常輕量級的 nginx 伺服器,沒有 PHP,簡單的映像服務。運行 nginx 1.0.15,我知道它很舊,但它工作了很多年沒有任何問題。這個 VPS 多年來沒有任何變化。

答案1

fork() failed while spawning "worker process" (12: Cannot allocate memory) 就是線索。

如果你仔細觀察,man 2 fork你會發現是什麼條件導致了這個職位。

ENOMEM fork()由於記憶體緊張,無法分配必要的內核結構。

ENOMEM嘗試在「init」進程已終止的 PID 命名空間中建立子程序。請參閱 pid_namespaces(7)。

它應該是這兩個條件之一。整個 VPS 是否會在同一時間重新啟動?如果是這樣,那就有你的答案。

如果您無法透過ps -o lstart 1在容器中執行操作並檢查init進程何時啟動來判斷,您可以潛在地測試這一點。

否則,如果當它說“內存緊張”時您仍然收到此訊息,則可能是因為整個系統內存緊張。這不是您在容器中可能了解的內容,因此您需要向託管提供者請求更多資訊。

答案2

根據您提供的錯誤訊息,工作進程似乎由於signal 9指示SIGKILL信號而退出。此外,錯誤訊息表明fork() system call is failing,這意味著該進程無法建立新的子進程。

錯誤訊息「無法分配記憶體」表示系統可能記憶體不足,這可能導致 fork() 系統呼叫失敗。此問題的一種可能解決方案是增加系統可用的記憶體量。

您可以嘗試使用“free -tm”命令檢查伺服器上的可用內存,該命令將顯示有關可用內存和交換空間的資訊。如果系統記憶體不足,您可能需要在伺服器上添加更多記憶體或調整 nginx 配置以使用更少的記憶體。

另一個可能的解決方案是減少 nginx 配置中的工作進程數量。您可以透過調整 nginx.conf 檔案中的「worker_processes」設定來做到這一點。透過減少工作進程的數量,您可以減少 nginx 伺服器的記憶體使用量。

答案3

添加交換。另外,請確保不存在任何憑證/權限問題。

另外,參考問題是某些應用程式可以使用的 RAM 受到限制。這些工人是做什麼的?這可能就是你的答案。

另外,你有沒有嘗試過更新一切?

相關內容