linux Too Many Files 問題檢視和解決方法

金字塔的旅行發表於2018-04-11

今天一個python處理程式報錯 Too Many Files,只看一看就是開啟了太多檔案,


檔案是用多程式啟動的,一共看了16個子程式,

然後我用 ulimit -a 檢視 當前系統設定的最大控制程式碼

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 63532
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63532
virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

其中openfile 那一行就代表單個程式可以開啟的最大控制程式碼數,這裡我設定為2048,開始是1024

然後使用 lsof -p 程式ID|wc -l 檢視程式所開啟的檔案數量,這裡的檔案包括所開啟的各種包的檔案比如json,然後發現開啟的檔案數只有60個,因為程式裡並沒有涉及到檔案的讀寫操作,所以猜想這裡的檔案數都算到了附近程裡,然後 


利用 ps -ef|grep 檔名 第三行就是父程式ID, 檢視父程式所開啟檔案數也只有60幾個,所以之前的猜想是錯誤的,所以這裡猜想pymongo的底層會做讀寫操作,

隨著時間的推移會增加開啟檔案數,這裡使用

增加開啟檔案數的最大數量

ulimit -n 2048

隨後繼續觀察,歡迎給出意見

參考文章 https://blog.csdn.net/roy_70/article/details/78423880



相關文章