在某段时间段,网站出现 nginx 502,通过宝塔查看,负载状态是 100%,查看监控,磁盘 IO 飙高,如下为近 7 日 IO 磁盘图:
nginx 抛出 502,证明是它的反向代理出错,这个代理 php-cgi 出了问题,我用的是 php-fpm,出了问题。 查看 php-fpm 日志,发现并没有什么异常,提示需要提升 start_servers 是因为在这个时候我重载了 php-fpm, 但是重启后并没作用。然后重启了 nginx,才恢复了正常。
查看 nginx 日志,出现了很多*12359859 connect() to unix:/tmp/php-cgi-72.sock failed (11: Resource temporarily unavailable) while connecting to upstream
根据这个 nginx 这个提示查了相关资料,得到了 3 个解决方案
结论:不考虑,查了相关的 blog,出现了相同问题,还从 tcp 改为 sock 模式呢!!
2.1、复制一份配置文件,修改里边的 pid sock cp /usr/local/php/etc/php-fpm.conf cp /usr/local/php/etc/php-fpm2.conf
[global]
pid = /usr/local/php/var/run/php-fpm2.pid
error_log = /usr/local/php/var/log/php-fpm2.log
log_level = notice
[www]
listen = /tmp/php-cgi2.sock
2.2、复制一个启动文件,也修改相关的信息
cp /etc/init.d/php-fpm /etc/init.d/php-fpm2
php_fpm_BIN=${exec_prefix}/sbin/php-fpm
php_fpm_CONF=${prefix}/etc/php-fpm2.conf
php_fpm_PID=${prefix}/var/run/php-fpm2.pid
2.3、启动 /etc/init.d/php-fpm2 start
2.4、nginx 配置文件,增加 upstream 模块
upstream backend{
server unix:/tmp/php-cgi.sock;
server unix:/tmp/php-cgi2.sock;
}
2.5、把 fastcgi_pass unix:/tmp/php-cgi.sock;改成 fastcgi_pass backend; 重新加载 /etc/init.d/nginx reload
结论:这个方法,和我直接调大 php-fpm max_children 差不多,不考虑。
结论:待检验,
V 友们,又遇到我这种情况吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.