【问题标题】:PHP-FPM not responding when CPU is 100% in low priority processes当 CPU 在低优先级进程中为 100% 时 PHP-FPM 没有响应
【发布时间】:2019-01-17 22:58:03
【问题描述】:

当 CPU 使用率为 100% 时我遇到了问题:PHP-FPM 没有响应,即使使用 100% CPU 的进程也以最低优先级 (+19) 运行。

让我解释一下:我的网站使用 inotify + bash 脚本触发了音频转换器 (ffmpeg)。转换器使用“nice -n 19”运行。因此,CPU 使用率为 100%,但理论上 PHP-FPM 具有优先级(默认为 0 优先级)。

会发生什么:只有 PHP 冻结。 Apache 可以响应 JPG/CSS/JS 等文件。 Linux 稳定,其他软件也一样。所有 .php 都返回“504 Gateway Timeout”(浏览器、Apache 响应)。 Apache 会打开很多 php-fpm 实例并保持打开状态。

30585 fedora    19   0.0   0.3   0:00.00 snippeter
30586 fedora    19  25.0   2.8   0:00.10 ffmpeg

15640 fedora     0   0.0   1.0   0:00.12 php-fpm
17174 fedora     0   0.0   1.0   0:00.10 php-fpm
20583 fedora     0   0.0   0.9   0:00.00 php-fpm
21072 fedora     0   0.0   0.9   0:00.00 php-fpm
21309 fedora     0   0.0   0.9   0:00.00 php-fpm
22601 fedora     0   0.0   0.9   0:00.00 php-fpm
23172 fedora     0   0.0   0.9   0:00.00 php-fpm
23277 fedora     0   0.0   0.9   0:00.00 php-fpm
24170 fedora     0   0.0   0.9   0:00.00 php-fpm
24823 fedora     0   0.0   0.9   0:00.00 php-fpm
24916 fedora     0   0.0   0.9   0:00.00 php-fpm
26589 fedora     0   0.0   0.9   0:00.00 php-fpm

%Cpu(s):  8.5 us,  4.5 sy, 85.6 ni,  0.0 id,  0.5 wa,  1.0 hi,  0.0 si,  0.0 st

更改 php-fpm 优先级(renice),没有区别。

我不知道该怎么办...我想在后台运行进程,即使使用 100% 的 CPU,但保持 PHP+Apache 正常运行。

服务器:Fedora 29,PHP 7.2。

【问题讨论】:

  • 服务器有多少个 CPU?
  • 1 个 CPU,它是一个 VPS。
  • 考虑到主机的价格,我只会扔另一个 CPU,至少是为了测试
  • 我知道这不会回答问题,但总的来说,我建议您将 ffmpeg 处理卸载到仅处理该问题的第二个 VPS,因此您不会妨碍另一个(似乎更相关/关键的过程,例如 php-fpm)
  • 您可以使用 Amazon Elastic Transcoder 等专用服务,

标签: php php-7.2 fedora-29


【解决方案1】:

找到了解决办法!

此问题与 100% 的 CPU 使用率无关,也与一个 CPU 无关。由于我有一个循环来打开每个音频转换器(bash 文件),并等待它完成运行下一个,因此 PHP session 被锁定!因此,当同一会话中的另一个 PHP 脚本尝试执行时,它无法读取会话文件,因此,PHP 冻结(等待访问会话文件,直到出现“网关超时”错误)。这就是为什么只有 PHP 会死机,其他软件不会。

要修复,我必须在主循环之前运行它:

session_write_close();
session_start(['read_and_close'=>true]);

因此,它写入并关闭会话文件,然后再次读取它一次,而不锁定它。

这只适用于 PHP 7+,很明显,您不能编写任何会话数据。或者,在循环之后,只需使用session_start() 再次打开会话。

【讨论】:

    猜你喜欢
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 2012-11-08
    • 2017-02-23
    • 2017-02-17
    • 2015-07-29
    • 1970-01-01
    相关资源
    最近更新 更多