关于apache2.2日志切割报错failed unexpectedly处理

–>

现象:用户方打电话,说网站不能正常访问,尝试重启apache后访问正常,但是随后几分钟又无法访问,需要不断重启才能维持官网访问,到现场查看后,发现错误日志error.log中记载了大量的虚拟主机日志切割不正常的报错,报错内容为:piped log program ‘bin/rotatelogs.exe D:/Apache2.2/logs/access_****.cn_%y%m%d.log 86400 480’ failed unexpectedly.  ***为对应的子站域名,http-vhosts.conf中配置了大概近五十个子站(虚拟主机),而报错日志中***将所有的子站都给囊括其中了。

处理方式:

1)、以为日志无法切割,遂观察了下access.log和error.log以及对应的子站的日志,发现有对应日期的切割记录;

2)、停止apache,将logs下所有日志剪切到别的目录,重新启动apache,观察到access.log和error.log正常生成,访问网站,无法响应,且error.log再不断的增大,打开发现内容还是为以上报错;

3)、网上有说这种报错是因为rotatelogs.exe的路径为相对路径引起的,但是我这里确不是这个问题,因为之前确实能生成对应日期的日志;

4)、尝试将虚拟主机配置文件中只配置一个虚拟主机(也就是只配一个网站信息,将所有子站暂时屏蔽掉),尝试重启apache,发现报错消失,当时猛的一惊,以为apache对虚拟主机数有限制?没听过这个事啊,别的项目上配置五六十个子站的也没见有事啊,既然怀疑,那就先尝试下,五个左右的加入配置的虚拟主机,当虚拟主机数到达25个的时候,此错误又开始出现;

5)、这时候灵光一闪,突然意识到,走错方向了,不是虚拟主机的数量限制,应该是文件描述符不够了(windows上叫文件句柄数),然后尝试将所有子站的访问日志和错误日志配置都给注掉,然后将所有虚拟主机都给加回去,大概四十六七个的样子,然后重启apache,发现日志并没有持续增长,也没有再报这个错误。

因为刚好客户那边web服务器空间不是很重足了,沟通后决定也就暂时不再启用对应的子站的日志记录了,只保留主站的日志记录。事后回想才想起来,在大概一个半月以前,曾经给他们配过一次虚拟主机,但是增加的数量还是挺多的,近二十多个子站,因为当时只是让配置上,域名解析还没做到位,因此没有重启,刚好在这时候,又出现过一次系统故障,客户方技术人员重启操作系统,相当于把apache的配置给重载了,所以才会有这个错误的产生。

这里有个链接是处理完这事以后回来查官方文档时候的发现:http://httpd.apache.org/docs/2.2/vhosts/fd-limits.html

大概是说,如果是使用大量的虚拟主机,并且使用不同的日志文件的时候,apache可能会用尽操作系统的可用的文件句柄数。

当出现这个问题的时候,可以尝试这样处理:减少日志文件的数量; 不要在<VirtualHost> 部分中指定日志文件,而只记录主日志文件,也就是我上面误打误撞的处理办法;另外一个就是增加操作系统的文件句柄数限制,但是我这里后期尝试了下,似乎不好使,当然,因为我也没有看到具体的峰值在哪里,所以这里也就不再过多做说明了,关于windows操作系统调整文件句柄数限制的链接:https://blog.csdn.net/zhouleiblog/article/details/17952973。

本文来源 互联网收集,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源,如您发现有涉嫌抄袭侵权的内容,请联系本站核实处理。

© 版权声明

相关文章