docker 容器報錯 too many open files 解決方法

1.查看當前系統限制最大文件打開數量

cat /proc/sys/fs/file-max
10000000

 

2.查詢當前系統已打開文件數量

cat /proc/sys/fs/file-nr
69312   0       100000000    # 左邊的值爲當前系統已打開文件數量,中間的不用管,右側表示當前系統限制最大文件打開數

以上查詢得知當前系統打開文件句柄數未達到上限,往下排查Docker進程的最大文件句柄數限制及已打開文件數

3.查詢當前Docker進程最大可打開文件數量及已打開文件數量

systemctl status docker | grep PID      #獲取Docker進程的PID號
Main PID: 14644 (dockerd)
 
cat /proc/14644/limits     ## 查看當前Docker進程最大可打開文件數量
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             unlimited            unlimited            processes
Max open files            655360               655360               files
Max locked memory         65536                65536                        bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       61943                61943                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
 
## Max open files 標識當前Docker進程限制最大打開文件數量爲655360 (注:此處值默認是65536,因爲手動執行了修改所以大了10倍)
 
ls -l /proc/14644/fd/* | wc -l    ## 獲取當前Docker進程已打開的文件數量
65342      #報錯時該值達到了最大限制65536,此時查詢已無故障現象

 

4.動態修改當前Docker進程的nofile限制,問題修復

prlimit --pid 14644 --nofile=655360:655360    #將Docker進程的nofile限制調整爲655360 
 
systemctl status docker #再次查詢Docker進程狀態發現問題已修復

5.file-max 的修改

在第一第二步驟中 如果 file-max 值 過小 也需要修改

臨時生效:

echo 100000000 > /proc/sys/fs/file-max    #動態修改當前系統最大可打開文件數量限制,也可以通過 /etc/sysctl.conf永久修改

永久生效:

/etc/sysctl.conf 中增加

fs.file-max = 100000000 

 

轉自:https://blog.csdn.net/whatday/article/details/125481727

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章