gpt4 book ai didi

PHP-FPM 在执行繁重工作时用户过多时崩溃

转载 作者:IT老高 更新时间:2023-10-28 23:50:04 29 4
gpt4 key购买 nike

我有一个运行 Apache/2.2.22 (Debian)、PHP 5.6.17 作为 FPM 和 MySQL 5.6.25 的服务器。

该项目使用名为 Redaxo 的 CMS 运行(我认为这并不重要,但我还是会告诉你)。在 Redaxo 中,有些功能需要一些时间(例如,删除缓存并重建它需要 1-2 分钟)。此时,当其他用户访问网站时,FPM 崩溃并显示 500 Internal Server Error,我必须多次重新加载页面,直到服务器错误消失并完成该过程。

我注意到只有当太多用户同时在网站上并且只有在完成繁重的操作时才会发生这种情况。

10 个用户同时上网 = 没问题
10 个用户同时上网,而缓存删除 = 每个人的 500 错误。

我通过禁止除我之外的所有人访问该网站来检查这一点(.htaccess 拒绝/允许使用 ip)。然后我做了繁重的操作,没有问题。一旦多个人再次访问该站点,问题就又出现了。

可能是什么?您需要我提供什么信息?

这些值在 php-fpm.conf

中设置(未注释)
[global]
pid = /run/php5-fpm.pid
error_log = /var/log/php5-fpm.log
emergency_restart_threshold = 0
include=/etc/php5/fpm/pool.d/*.conf

这些值在项目特定的 fpm.conf

中设置(未注释)
[projectname]
user = projectname
group = projectname

listen = /var/run/php5-fpm-projectname.sock
listen.owner = projectname
listen.group = projectname
listen.mode = 0660

pm = dynamic
pm.max_children = 150
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30

chdir = /

php_value[upload_max_filesize] = 128M
php_value[max_post_size] = 128M
php_value[max_execution_time] = 180
php_value[memory_limit] = 256M

脚本失败时对 MySQL 和文件创建有很大帮助吗?但是它很大,所以我不确定是否应该在这里发布?或者如果它甚至是问题?

apache 错误日志说明了这一点

[Tue Feb 09 10:54:01 2016] [error] [client {IP}] (104)Connection reset by peer: FastCGI: comm with server "/fcgi-bin-php5-fpm-projectnmae" aborted: read failed
[Tue Feb 09 10:54:01 2016] [error] [client {IP}] FastCGI: incomplete headers (0 bytes) received from server "/fcgi-bin-php5-fpm-projectnmae"

或者这个

[Tue Feb 09 11:00:46 2016] [error] [client {IP}] FastCGI: incomplete headers (0 bytes) received from server "/fcgi-bin-php5-fpm-projectname"
[Tue Feb 09 11:00:48 2016] [error] [client {IP}] (104)Connection reset by peer: FastCGI: comm with server "/fcgi-bin-php5-fpm-projectname" aborted: read failed

fpm-log 说明如下。当然总是不同的时间安排

[10-Feb-2016 09:40:59] WARNING: [pool projectname] child 10970 exited on signal 7 (SIGBUS) after 50.186611 seconds from start
[10-Feb-2016 09:40:59] NOTICE: [pool projectname] child 11092 started

有时候里面会有这样的警告

[09-Feb-2016 11:00:41] WARNING: [pool projectname] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 6 total children
[09-Feb-2016 11:00:42] WARNING: [pool projectname] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 16 children, there are 0 idle, and 7 total children

这里有更多调试信息

[18-Feb-2016 17:42:01] WARNING: [pool projectname] child 9088 exited on signal 7 (SIGBUS) after 70.130564 seconds from start
[18-Feb-2016 17:42:01] NOTICE: [pool projectname] child 9205 started
[18-Feb-2016 17:43:55] WARNING: [pool projectname] child 9099 said into stderr: "NOTICE: PHP message: PHP Notice: Undefined offset: 1181 in /var/www/projectname/htdocs/redaxo/include/classes/class.ooarticle.inc.php on line 44"
[18-Feb-2016 17:43:55] WARNING: [pool projectname] child 9099 said into stderr: "NOTICE: PHP message: PHP Warning: Invalid argument supplied for foreach() in /var/www/projectname/htdocs/redaxo/include/classes/class.ooredaxo.inc.php on line 134"
[18-Feb-2016 17:43:55] WARNING: [pool projectname] child 9099 exited on signal 7 (SIGBUS) after 183.838886 seconds from start
[18-Feb-2016 17:43:55] NOTICE: [pool projectname] child 9330 started
[18-Feb-2016 17:44:00] WARNING: [pool projectname] child 9101 exited on signal 7 (SIGBUS) after 188.987954 seconds from start
[18-Feb-2016 17:44:00] NOTICE: [pool projectname] child 9336 started

最佳答案

这可能只是您的 MySQL 服务器的某些锁定问题的影响。

您必须在延迟期间连接到您的 MySQL 主机。

  • 如果无法连接,则说明您的 MySQL 服务器或用户的并发连接数已用完

  • 如果你能连接,你必须看看mysql命令“show processlist”返回什么。现在您有 2 个选择:

    • 许多“等待查询缓存锁定”:这将要求您更改一些 MySQL 服务器配置。 (这可能是由于查询缓存过大造成的)

    • 您有一个需要所有资源的请求,您必须对其进行优化。

关于PHP-FPM 在执行繁重工作时用户过多时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35311056/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com