我注意到我们的一台服务器在 logrotate 运行后立即开始返回错误,即在 nginx 错误日志中我可以看到:
[错误] 8501#0:*118126869 recv()失败(104:对等方重置连接)从上游读取响应头时,客户端:xxx.yyy.zz.ww,服务器:www.test.com,请求:“GET /index.php HTTP/1.1”,上游:“fastcgi://127.0.0.1:9011”,主机:“www.test.com”
我尝试添加一个 postrotate 操作,以使 php 正常重新加载,但错误仍然发生,我们当前的 logrotate 如下:
/var/log/php5-fpm.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 644 root root
postrotate
[ ! -f /var/run/php5-fpm.pid ] || kill -USR2 `cat /var/run/php5-fpm.pid`
endscript
}
PHP配置如下:
[www-9011]
user = www-data
group = www-data
listen = 127.0.0.1:9011
listen.backlog = 65535
pm = ondemand
pm.max_children = 50
pm.process_idle_timeout = 10s;
pm.max_requests = 500
rlimit_files = 16384
chdir = /
catch_workers_output = no
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
我们在 ubuntu 12.04 和 php 5.3.10 上运行
答案1
发送 USR1
源代码显示这是专门用于旋转文件的,我知道 Ubuntu 14.04 不能很好地处理 fpm 重新加载(USR2),我认为旧版本也是如此。
因此改为
postrotate
[ ! -f /var/run/php5-fpm.pid ] || kill -USR1 `cat /var/run/php5-fpm.pid`
endscript
简单地旋转日志
答案2
这是一个老问题,但仍然没有答案。因此,我尝试为那些仍在寻找答案的人提供答案:logrotate
配置文件规定,在进行轮换后,logrotate
应终止该php-fpm
进程:
postrotate
[ ! -f /var/run/php5-fpm.pid ] || kill -USR1 `cat /var/run/php5-fpm.pid`
php5-fpm-reopenlogs
Ubuntu 16 存储库中的当前默认配置是调用用于日志文件轮换的功能:
postrotate
/usr/lib/php5/php5-fpm-reopenlogs
与PHP7类似:
postrotate
/usr/lib/php/php7.0-fpm-reopenlogs
以下是完整的上下文/etc/logrotate.d/php5-fpm
展示:postrotate
/var/log/php5-fpm.log {
rotate 12
weekly
missingok
notifempty
compress
delaycompress
postrotate
# invoke-rc.d php5-fpm reload > /dev/null
/usr/lib/php5/php5-fpm-reopenlogs
endscript
}
答案3
似乎在运行 logrotate 进程后,您在服务器的 nginx 错误日志中遇到了错误。错误消息表明存在与“recv()”函数相关的问题,并提到对等方重置了连接。这发生在服务器尝试从上游服务器读取响应标头时。日志还提供有关客户端 IP 地址、服务器域、请求类型和上游服务器详细信息的信息。
这种类型的错误通常与 nginx 和 FastCGI 后端(在本例中为“127.0.0.1:9011”处的上游服务器)之间的通信有关。“对等方重置连接”错误表示上游服务器在 nginx 等待响应时突然关闭了连接。这种情况可能由于多种原因而发生,例如上游服务器崩溃或由于网络问题导致连接断开。
要排除故障并解决此问题,您可以考虑采取以下步骤:
检查上游服务器:验证 FastCGI 后端 (127.0.0.1:9011) 是否正在运行并正常运行。检查其日志中是否有任何错误或崩溃。
网络连接:检查 nginx 与上游服务器之间的网络连接。确保没有导致连接中断的网络问题。
资源限制:确保上游服务器具有足够的资源(CPU、内存等)来处理传入请求。资源限制可能会导致崩溃或连接重置。
FastCGI 配置:检查 nginx 设置中的 FastCGI 配置。确保设置正确配置以匹配 FastCGI 服务器的参数。
更新软件:确保 nginx 和 FastCGI 后端都运行最新的稳定版本。软件更新通常可以解决已知问题。
错误处理:在代码中实现适当的错误处理,以便妥善处理意外情况。这可以防止上游服务器崩溃并突然关闭连接。
负载均衡:如果可行,请考虑使用多个上游服务器实现负载平衡以分配流量并减少一台服务器故障的影响。
监控和分析:设置监控工具来跟踪服务器性能和错误。分析趋势和模式可以深入了解问题的根本原因。
日志:检查 nginx 和上游服务器的日志,查找任何可能有助于解释问题的额外错误消息或相关信息。
配置审查:仔细检查您的 nginx 和 FastCGI 配置,查找可能导致问题的任何错误配置或不一致。
记住一次实施一个更改,并在每次修改后进行测试,以确定解决问题的具体操作。