Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Apache打开的文件太多(24个)_Php_Linux_Apache_Session - Fatal编程技术网

Php Apache打开的文件太多(24个)

Php Apache打开的文件太多(24个),php,linux,apache,session,Php,Linux,Apache,Session,由于“打开的文件太多(24)”这个问题有很多答案,以及如何解决这个问题,只是增加了允许打开的文件的数量限制,我没有找到任何关于如何检查谁在使用这些文件的建议 我得到了这个错误: 致命错误:未捕获异常“exception”,消息为“Unknown:open(/var/lib/php/session/sess_375048d5pfne5cu3v0l3sjj04,O_RDWR)失败:中打开的文件太多(24)” 我还重新启动了apache进程: $ ps aux | grep apa 84:root

由于“打开的文件太多(24)”这个问题有很多答案,以及如何解决这个问题,只是增加了允许打开的文件的数量限制,我没有找到任何关于如何检查谁在使用这些文件的建议

我得到了这个错误:

致命错误:未捕获异常“exception”,消息为“Unknown:open(/var/lib/php/session/sess_375048d5pfne5cu3v0l3sjj04,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\uu
开头的文件。这些文件包含访问者的会话数据

如何检查谁在使用这些文件:

lsof -n|grep -F /var/lib/php/sess_
将为您提供一个进程列表,其中包含正在使用它们的进程

如果您删除这些文件(
rm-vf/var/lib/php/sess.*
),您当前的所有访问者都将失去当前会话(他们需要重新登录您的站点),但问题将得到解决

一个长期的解决方案是更频繁地终止会话。在您可以找到的中,如何在php中设置自动删除过期会话文件。在我看来,将
session.cookie\u life
设置为大约半小时,将
session.gc\u maxlife
设置为稍长一点(例如35分钟)就可以了

如果您只有一个只有少数访问者的小站点(每天最多几十个),那么每天从crontab中删除旧会话文件就足够了

如果你有一个大的网站,或者你想要一个超级用户友好(但不是那么安全)的网站,你需要能够处理大量的会话。在我看来,在这种情况下,最好使用带有数据库后端的其他php会话解决方案

命令
find/var/lib/php-type f-name“sess”\-ctime 1440 | xargs-P 1-n 50 rm-vf
将删除此目录中从
sess
开始的所有文件,以及一天之前的所有文件