PHP Fpm进程正在查杀我的网站:进程被阻止状态为D.

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP Fpm进程正在查杀我的网站:进程被阻止状态为D.脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
经过几天的网络搜索,Stack Overflow,GOOGLE,.无处不在,我无法理解 PHP-FPM正常工作几小时后会发生什么.

问题描述:

我有一个ubuntu 16.04 VPS,我已经安装了PHP-FPM和Nginx以及一个小型redis-server来存储会话.我有4个网站在PHP-fpm下运行.所有网站都很好,只有其中一个有这个问题.

PHP-FPM使用套接字与Nginx通信.

工作了几个小时后,当我运行htop命令时,突然PHP-FPM进程无效并且状态为D.以下是htop命令输出的屏幕截图:

PHP Fpm进程正在查杀我的网站:进程被阻止状态为D.

互联网搜索后,我得到了状态D意味着进程正在等待资.

我为MysqL服务器添加了更多内存但没有任何反应.当我从workbench或任何其他应用程序执行命令时,MysqL服务器很好.

也许,这是一个记忆问题?

我为VPS添加了内存,它现在运行6 GB内存(大部分内存未使用). PHP-FPM在运行数小时后继续具有状态D.

也许它与打开的文件描述符有关?

我将打开的文件描述符的数量改为2097152这是一个非常大的数字.我继续遇到同样的问题.

也许,这是套接字问题或Linux配置问题?

我已经增加了大多数Linux配置参数,如下所示:

# Increase size of file handles and inode cache
fs.file-max = 2097152

# unix sockets accept by default 127 connections.
net.core.somaxconn = 4096

vm.swappiness = 0
vm.vfs_cache_Pressure = 50

#Needed by redis
vm.overcommIT_memory = 1

#
# 16MB PEr socket - which sounds like a lot,but will virtually never
# consume that much.
#
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

# Increase the number of outstanding syn requests Allowed.
# c.f. The use of syncookies.
net.ipv4.tcp_max_syn_backLOG = 8192

但我继续遇到同样的问题.这是我在Nginx日志中得到的:

2016/07/17 22:57:30 [alert] 1885#1885: *59394 open socket #156 left in connection 117
2016/07/17 22:57:30 [alert] 1885#1885: *59341 open socket #107 left in connection 118
2016/07/17 22:57:30 [alert] 1885#1885: *59385 open socket #148 left in connection 119
2016/07/17 22:57:30 [alert] 1885#1885: *59392 open socket #154 left in connection 121

我尝试过在网上找到的大多数推荐的解决方案,但没有成功.

我在PHP-fpm.conf中更改了这些参数.

emergency_restart_threshold = 30
emergency_restart_interval = 180
PRocess_control_timeout = 30

这是池的PHP-fpm配置:

pm = ondemand
pm.max_children = 30
pm.process_idle_timeout = 10s;
pm.max_requests = 500

这是我的Nginx站点配置:

fastcgi_buffers 256 16k;
fastcgi_max_temp_file_size 0;

    location ~ ^/index\.PHP(/|$) {
        fastcgi_pass unix:/VAR/run/PHP5-fpm-mysite.COM.sock;
        fastcgi_split_path_info ^(.+\.PHP)(/.*)$;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $realpath_root$fastcgi_@R_360_195@;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }

Nginx Global配置:

worker_processes 2;
worker_rlimit_nofile 100000;

pid /run/Nginx.pid;

events {
        worker_connections 1024;
        multi_accept on;
}

最后一件事:在2周之前,我运行的是Ubuntu 14.04,我已将服务器升级到Ubuntu 16.04,我遇到了很多问题.但是这一个,我无法准确理解这个问题的根源.

我正在使用Ocache缓存代码,我增加了所有参数以获得更多内存和网站工作正常,缓存永远不会满.

我已经多次重启服务器以应用配置.

光盘:50%已满.我有很多空间.

请注意,当PHP-fpm进程被阻止时,我重新启动了整个服务,几秒钟之后,我遇到了同样的问题.我为Nginx做了同样的事情,我遇到了同样的问题.使网站工作的唯一方法是重新启动整个系统.

欢迎任何帮助!

解决方法

经过几天寻找解决方案后,问题与Linux inode无关,与内存无关且与套接字无关……

它与应用程序代码有关.

我使用Symfony2 Framework,由于某些原因,我将参数“auto_generate_Proxy_classes”更改为true.我已经将代码推向了生产阶段.

当auto_generate_proxy_classes设置为true时,Doctrine将检查所有代理类并在每个请求中重新生成它们.因此,当我收到很多请求时,PHP-fpm进程将同时重新生成这些类.因此,进程被阻止,直到其他进程完成代码生成.

解:

代替:

doctrine:
    dbal:
        ....
    orm:
        auto_generate_proxy_classes: true.

设置认的Symfony2配置:

doctrine:
    dbal:
        ....
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"

脚本宝典总结

以上是脚本宝典为你收集整理的PHP Fpm进程正在查杀我的网站:进程被阻止状态为D.全部内容,希望文章能够帮你解决PHP Fpm进程正在查杀我的网站:进程被阻止状态为D.所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。