簡體   English   中英

Apache太多打開的文件(24)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM