
我正在運行 Ubuntu 12.04,但遇到了一個大問題。今天兩次,我打開的 gnome 終端會話之一被鎖定並列印了錯誤
pipe: too many open files
我意識到這可能與我顯示的用戶限制有關ulimit -n
,順便說一下,該限制是1024。的內容。例如,我不能用來xkill
殺死任何東西,我不能打開另一個終端來查看頂部,我不能運行關閉,我不能只下降到控制台並登入。點擊應打開 X 窗口的任何連結會產生一個新窗口,其中顯示:
There was an error launching the application.
Details: Failed to fork (Cannot allocate memory)
這與我按 Ctrl+Alt+F1 後嘗試登入時遇到的錯誤相同。因為我在這一點上完全陷入困境,所以我被迫硬啟動我的機器。這使得調試變得極為困難。
一旦遇到此錯誤,我可以採取什麼措施來恢復?我應該如何追蹤錯誤?
最後一點,我並沒有運行過多的東西:兩個終端,一個帶有 2 個選項卡的 byobu 會話,一個帶有 python 會話;一個 emacs 實例、一個 google chrome 瀏覽器和多個 ROS(機器人作業系統)節點。
編輯
按 Ctrl+Alt+Backspace 重新啟動顯示管理器只是讓我重新登入並開始開啟終端。使用ps
發現仍然有許多進程在運行,並且發生了鎖定。至少,這允許我從軟體重新啟動我的機器。我應該如何繼續確定導致此問題的原因?
編輯2
我剛剛打開了兩個我剛剛放在一邊的終端,然後等待崩潰發生。一旦發生這種情況,我就能夠從 的輸出中捕獲螢幕截圖top
。不知道輸出是否特別有用,但我已附上它。我注意到的唯一特別奇怪的是有 5 個殭屍進程。
答案1
看來你的某個地方有資源洩漏。您可以運行“lsof”來獲取所有開啟檔案的清單(顯然是在系統陷入困境之前的某個時刻)。將清單與活動 pid 進行比較,您(也許)會找到罪魁禍首。
I'd also suggest changing the open file limit in /etc/security/limits.conf (or maybe somewhere else? I've not followed Ubuntu for a while and there seems to be some speculation that limits.conf isn't loaded by預設).如果確實存在資源洩漏,那隻會延長問題的時間。首先尋找洩漏點。
答案2
開啟檔案過多訊息可能是特定於進程的,而不是系統範圍的問題。 「無法分配記憶體」可能是特定於進程的,但也可能是系統範圍的。
正如 cydonian.monk 指出的那樣,存在某種資源洩漏。最可能的罪魁禍首是失控或行為不當的進程,該進程要么重複生成子進程,要么存在錯誤或內存洩漏,導致其重複打開文件和/或分配內存,導致系統內存不足。
我將重點關注您在第一個收到太多文件開啟訊息的 gnome 終端視窗中所做的事情。確定該視窗中正在運行的內容並關注其行為。每隔幾分鐘執行一次 ps is cron 或運行top -b
並將輸出儲存到檔案中可以讓您了解下一次當機發生時發生的情況。
您提供的頂部輸出看起來像是正常運作的系統。
答案3
您是否嘗試過增加文件數量的上限?
您需要做的是將這些行新增至 /etc/security/limits.conf 中
* soft nofile 6000
* hard nofile 6000