[英]Apache Too many open files (24)
由于对“打开的文件过多(24)”问题有很多答案,以及如何解决该问题,只是增加了允许的打开文件数限制,所以我没有找到任何建议来检查谁在使用这些文件。
我收到此错误:
致命错误:未捕获的异常“ Exception”,消息为“未知:open(/ var / lib / php / session / sess_375048d5pfne5cu3v0l3sjji04,O_RDWR)失败:打开的文件过多(24)”
另外,我已经重新启动了我的Apache流程:
$ ps aux | grep apa
84:root 7528 0.0 0.1 102376 4908 ? Ss 11:11 0:00 /usr/sbin/apache2 -k start
85:www-data 7531 0.0 0.0 101528 2952 ? S 11:11 0:00 /usr/sbin/apache2 -k start
86:www-data 7532 0.0 0.1 1309308 7168 ? Sl 11:11 0:00 /usr/sbin/apache2 -k start
87:www-data 7533 0.0 0.1 1309308 7312 ? Sl 11:11 0:00 /usr/sbin/apache2 -k start
91:vagrant 7748 0.0 0.0 8860 648 pts/0 S+ 11:20 0:00 grep --color=auto -in apa
由于我的虚拟盒子机器实际上正在通过htop
休眠,是否有任何工具可以检查谁在使用这些文件?
查看目录/var/lib/php
! 您会在那里找到许多以sess_
开头的文件。 这些文件包含访问者的会话数据。
您如何检查谁在使用这些文件:
lsof -n|grep -F /var/lib/php/sess_
将为您提供一个进程列表,说明哪些进程正在使用它们。
如果删除这些文件( rm -vf /var/lib/php/sess_*
),则所有当前访问者都将丢失其当前会话(他们需要重新登录到您的站点),但问题将得到解决。
长期的解决方案是更频繁地终止会话。 在这个问题中,您可以找到如何在php中设置以自动删除过期的会话文件。 在我看来,将session.cookie_lifetime
设置为半小时左右,并将session.gc_maxlifetime
设置为更长一点(例如35分钟)是可以的。
如果您只有一个只有几个访问者的小型站点(每天最多几十个站点),那么每天从crontab中删除旧的会话文件就足够了。
如果您的网站很大,或者想要一个超级用户友好(但不太安全)的网站,则需要能够处理很多会话。 在我看来,在这种情况下,最好将一些备用php会话解决方案与数据库后端一起使用。
命令find /var/lib/php -type f -name "sess_*" \\! -ctime 1440|xargs -P 1 -n 50 rm -vf
find /var/lib/php -type f -name "sess_*" \\! -ctime 1440|xargs -P 1 -n 50 rm -vf
将删除该目录中所有文件,从sess_
开始,并且一天或更早。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.