AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 399598
Accepted
alfish
alfish
Asked: 2012-06-18 13:34:59 +0800 CST2012-06-18 13:34:59 +0800 CST 2012-06-18 13:34:59 +0800 CST

如何自动恢复php-fpm?

  • 772

我在 Debian Squeeze 上使用 nginx+php-fpm 来处理繁忙的服务器,并且很难处理达到的最大连接数。这里的问题是 php 进程有时会在高负载下随机死亡,并使服务器没有 php 进程。然后我需要手动重启 php5-fpm 服务来恢复服务器。

我想知道如何避免这种情况发生,或者至少通过在没有 php 进程留下来侦听传入请求时自动重新启动 php5-fpm 来治疗这些症状。我的相关配置是:

pm = dynamic
pm.max_children = 1400

pm.start_servers = 10
pm.max_spare_servers = 20
pm.process_idle_timeout = 1s; #not sure it will be useful when pm=dynamic
pm.max_requests = 100000
request_terminate_timeout = 30

感谢您提出的解决这个棘手问题的建议。

debian monitoring timeout php-fpm
  • 3 3 个回答
  • 6299 Views

3 个回答

  • Voted
  1. Best Answer
    steve
    2012-06-18T14:32:02+08:002012-06-18T14:32:02+08:00

    老看门狗脚本的想法是吧?这不是解决问题的最优雅的方法,但它可以暂时补救这种情况,直到您首先弄清楚为什么会发生这种情况。

    实际问题需要解决,要么是服务器需要更精细地调整,要么是服务器功能不够强大,无法首先处理负载。

    您已确定该进程实际上已经结束。在这种情况下,就像确定进程是否仍然存在一样简单。ps aux 应该为你做。

    例如:

    ps aux|grep php-fpm|grep -v grep|awk '{print $2}'
    

    应该输出 php-fpm 的进程 ID。如果不存在则需要重新启动

    所以类似的东西应该可以解决问题。(简短而简单)

    #!/bin/bash
    pid=`ps aux|grep php-fpm|grep -v grep|awk '{print $2}'`
    if [ $pid == '' ]
    then
    service php-fpm restart
    fi
    

    该脚本将作为 crontab 每分钟运行一次。并且尚未调试。因此,请对其进行试验并确保其正常工作。

    使用僵尸进程这样做的问题是它们确实存在并且正在“运行”但实际上没有做任何事情。在这种情况下,他们需要先被杀死,然后进程重新启动。

    同样,正确的做法是确定真正导致服务崩溃的原因。看门狗脚本的想法只是为了给你争取时间。

    希望能帮助到你。祝你好运

    • 3
  2. ChristophLSA
    2013-01-04T05:48:53+08:002013-01-04T05:48:53+08:00

    php-fcgi 的问题是:进程在每次请求后保持活动状态(与 php-cgi 不同)。每个请求都会增加php进程的内存使用。任何时候进程达到 php.ini 的内存限制。

    你可以通过减少来避免这种情况

    pm.max_requests = <value>
    
    • 1
  3. Luis Oliveira
    2012-06-20T00:47:22+08:002012-06-20T00:47:22+08:00

    pm.max_children = 1400

    您不会不想将 max children 参数设置得那么高。这实际上太高了。

    您可能想尝试一下,但是老实说:

    从...开始:

    pm.max_children = 50

    看看进展如何。

    • 0

相关问题

  • 关闭 FTP

  • 如何在同一台电脑上从 putty 连接 debian vmware

  • debian- 文件到包的映射

  • Debian Ubuntu 网络管理器错误 [关闭]

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve