【问题标题】:Dealing with Zombie PHP processes on shared hosting处理共享主机上的僵尸 PHP 进程
【发布时间】:2017-01-02 21:14:22
【问题描述】:

我正在使用共享主机。我看到越来越多的流程。当我查看ps aux 时,我看到每天大约添加两个<defunct> 进程lsphp。现在总数已经超过 40 个,而且这个托管的硬上限是 100 个总进程,这让我很担心。

我注意到这些进程中正在运行的TIME0:290:30。这让我怀疑这些是执行时间不足的进程。我在开始附近的代码中手动设置了这个时间:ini_set('max_execution_time', 30); 因为我网站上最慢的脚本运行大约 3-5 秒,而 30 秒似乎给了一个足够大的差距,可以知道进程已经挂起并且不会未完待续。然而,这似乎适得其反。

我查看了应用程序日志,似乎挂起的进程(至少超过时间限制的进程)是最长的 DomPDF 进程。我的猜测是用户请求 PDF 但在 PDF 准备好并发送答案之前关闭连接,也许这会以某种方式使进程处于空闲状态......或者只是 DomPDF 让自己处于这种状态?

可能是什么原因?我该怎么做才能解决这个问题?

我能以某种方式(通过修改 PHP 脚本)阻止这些进程僵尸化吗?我是否有机会杀死进程(我无权重新启动机器或杀死父进程)。

【问题讨论】:

    标签: php zombie-process


    【解决方案1】:

    除了系统是“共享主机”之外,您没有告诉我们系统是如何配置的。它是 共享 托管意味着您不太可能有权影响其行为,而您应该与之交谈的第一个人是服务提供商 - 之后你付给他们支持的费用。

    您看到的 php 进程 建议 它被配置为 CGI 或 fastCGI -(或者,上帝保佑,suPHP)。虽然您可能有僵尸进程的原因有很多,但这些可能不计入您的服务器限制(您没有说明这是如何实现/强制执行的)。可能的原因是:

    • 您有某种 fCGI 进程管理器,它正在执行时间限制 - 您可能无权访问
    • 您的某些脚本中有 ignore_user_abort(true)

    去与您的托管服务提供商交谈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      相关资源
      最近更新 更多