转到正文

浪淘沙

静观己心,厚积薄发

存档

分类: 服务器

同学说服务器上一个php文件不能正常访问了,直接显示了nginx的500页面了。ssh到服务器,开始debug之旅。

首先,查看nginx log,看到如下的log信息:

2017/04/13 15:42:20 [error] 14276#0: *102641755 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 182.129.141.222, server: yy1.bjshinesky.com, request: “POST /v1/useractivates.php HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”

这样的log,网上一搜,一模一样的问题一大堆。导致这条log的情况如下:

       php-fpm timeout直接导致php-fpm被kill再重启。同学这个肯定不是这个情况——访问问题url,直接就500错误页面了,根据不是timeout的问题导致的。为了安全期间,还是看了nginx.conf和php-fpm.conf,发现各种配置项都正常。排除。

下面各种猜测问题:

1、新建一个p.php 调用phpinfo()。访问,一切正常。 — 说明php-fpm执行正常

2、修改p.php 故意弄出语法错误。访问,不再是500错误,而且log可以显示具体的PHP错误信息。 — 说明日志已经记录了php错误信息。访问提问题url没有报php错误信息,并不是因为php语法错误

3、直接命令行执行问题php文件。直接报错:File size limit exceeded. —系统资源限制(猜测可能是因为操作了过大的文件,直接被系统限制了。)

跟踪代码发现,问题php文件里面有好多log write.除了这个,也就是是curl了。猜测应该是日志文件太大,导致打开日志文件的时候出现了问题。找到存放日志文件目录,执行命令’ll’查看目录文件信息。

-rw-r–r– 1 nobody nobody 2147483647 Apr 10 15:13 2017-04-10.log
-rw-r–r– 1 nobody nobody 2147483647 Apr 11 11:18 2017-04-11.log
-rw-r–r– 1 nobody nobody 2147483647 Apr 12 14:07 2017-04-12.log

嗯,文件大小为:2147483647 = 2^31 -1 。再次猜想,当日志文件大于这个数值的时候(32位的默认单文件最大2G),php-fpm被系统强制挂起。

测试猜想:

cp 2017-04-11.log 2017-04-11.log.bak   —备份

> 2017-04-11.log — 清空log文件

再次执行问题php文件,正常,浏览器访问,正常。

问题解决。

 

PS:

1、先上日志只记录必要消息,debug相关的信息要及时关掉;

2、线上写文件日志的时候,一定要控制日志文件的大小,不要不管文件大写,只管写log;

 

参考:

http://www.th7.cn/Program/php/201408/254237.shtml

http://blog.csdn.net/dc_726/article/details/11950189

http://www.jb51.net/article/38489.htm

http://blog.sina.com.cn/s/blog_4ae178ba0100z5a7.html

 

原文地址:http://huoding.com/2013/04/21/246

被遗忘的Logrotate

Posted on

我发现很多人的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!

Logrotate的介绍

显而易见,Logrotate是基于CRON来运行的,其脚本是「/etc/cron.daily/logrotate」:

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

继续阅读