簡體   English   中英

有沒有一種簡單的方法可以在服務器上的 502 網關超時后自動重新啟動 php-fpm?

[英]Is there an easy way to automatically do a php-fpm restart after a 502 gateway timeout on server?

您是否有關於為使用 Wordpress 和 nginx 的更大站點安裝心跳工具的任何有用的鏈接、提示或腳本。如果太多人同時訪問該站點,服務器將關閉。 發生這種情況后,我需要一些東西來立即自動重啟網站。

問候

您的問題是如何在 502 上重新啟動 PHP。我的第一個答案是首先嘗試防止 502 發生。

  1. PHP 可能消耗了太多內存。 我的猜測是您的 php FCGI 子項數量設置得太高。 在您的 init 腳本中,您應該有一個類似 PHP_FCGI_CHILDREN=20 或類似的條目來控制將啟動的 PHP 進程的數量。 我會嘗試減少數量。 如果您可以確定每個 PHP 進程的平均內存(可能使用 top ),那么您可以確定應該運行的最大 PHP 進程數。 例如,如果您有一個 2,000MB 的服務器,並且您的 PHP 進程每個最多消耗 100MB,那么您需要將它們限制為 20。

  2. 您可以創建另一個位置並以@ 符號開始名稱。 @ 符號用於“內部”位置。 我喜歡使用 nginx 的http://openresty.org發行版。 它包括 ngx_lua http://wiki.nginx.org/HttpLuaModule模塊。 Lua 是一種腳本語言,可以(除其他外)執行 shell 命令。 例如:

     location / { error_page 502 = @php502error; } location @php502error { content_by_lua 'os.execute("/bin/restart-my-php-processes.sh")'; }

    os.execute是阻塞的,所以你要記住這一點......我聽說有人設置了一個 thttpd 來運行腳本。 所以你會在你的 @php502error 位置使用 proxy_pass。

盡管 kaicurry 是正確的,但您應該編輯php.ini文件以解決問題的根源; 實際回答你的問題:

  1. 編輯您的php-fpm.service文件。 例如,輸入nano /lib/systemd/system/php-fpm.service

  2. [Service]底部添加以下兩行:

    Restart=on-failure

    RestartSec=5s

  3. 重啟 systemctl: systemctl daemon-reload

Php 現在會在失敗時自動重啟。 您應該偶爾檢查日志以確保它不會經常失敗。

您可能還希望對 nginx 執行相同的操作: /lib/systemd/system/nginx.service

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM