2017-01-02 111 views
1

我正在使用共享主機。我看到越來越多的流程。當我查看ps aux時,我看到每天都會添加大約兩個<defunct>進程lsphp。現在總數已經超過了40個,而且這個託管有100個流程的硬頂,這讓我很擔心。在共享主機上處理殭屍PHP進程

我注意到這些進程的運行TIME0:290:30。這讓我懷疑這些是執行時間結束的進程。我在接近開始的代碼中手動設置了這個時間:ini_set('max_execution_time', 30);,因爲我網站上最慢的腳本運行了大約3-5秒,而30秒似乎給了足夠大的差距來知道該進程已經掛起並且不會繼續。然而,這似乎已經倒退了。

我查看了應用程序日誌,看起來掛起的進程(至少超過時間限制的進程)是最長的DomPDF進程。我的猜測是,用戶請求PDF,但在PDF準備好之前關閉連接,並且發送了答案,也許這會以某種方式使進程處於空閒狀態......或者只是DomPDF進入這種狀態?

可能是什麼原因?我能做些什麼來解決這個問題?

我可以以某種方式(通過修改PHP腳本)防止這些進程zombifying?我有沒有機會殺掉進程(我沒有權利重啓機器或殺死父進程)。

回答

1

您已經告訴我們關於系統如何配置,而不是「共享主機」。這是共享託管意味着你不太可能有訪問影響其行爲太多,而你應該與之交談的人是服務提供商 - 畢竟你是在向他們支付支持。

你看到php進程建議它被配置爲CGI或fastCGI - (或者上帝禁止,suPHP)。雖然有很多原因可能導致殭屍進程,但這些可能不會計入您的服務器限制(您沒有說明這是如何實施/強制執行的)。可能的原因是:

  • 你有某種被強制執行的時間限制FCGI進程管理器 - 在某些腳本
  • 的,你可能不必
  • 訪問你有ignore_user_abort(真)

請與您的託管服務提供商聯繫。