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