[转]docker 容器报错 too many open files 解决方法

.查看当前系统限制最大文件打开数量
 
  1. cat /proc/sys/fs/file-max

  2. 10000000

一键获取完整项目代码bash

2.查询当前系统已打开文件数量
 
  1. cat /proc/sys/fs/file-nr

  2. 69312 0 100000000 # 左边的值为当前系统已打开文件数量,中间的不用管,右侧表示当前系统限制最大文件打开数

一键获取完整项目代码

以上查询得知当前系统打开文件句柄数未达到上限,往下排查Docker进程的最大文件句柄数限制及已打开文件数

3.查询当前Docker进程最大可打开文件数量及已打开文件数量
 
  1. systemctl status docker | grep PID #获取Docker进程的PID号

  2. Main PID: 14644 (dockerd)

  3. cat /proc/14644/limits ## 查看当前Docker进程最大可打开文件数量

  4. Max cpu time unlimited unlimited seconds

  5. Max file size unlimited unlimited bytes

  6. Max data size unlimited unlimited bytes

  7. Max stack size 8388608 unlimited bytes

  8. Max core file size unlimited unlimited bytes

  9. Max resident set unlimited unlimited bytes

  10. Max processes unlimited unlimited processes

  11. Max open files 655360 655360 files

  12. Max locked memory 65536 65536 bytes

  13. Max address space unlimited unlimited bytes

  14. Max file locks unlimited unlimited locks

  15. Max pending signals 61943 61943 signals

  16. Max msgqueue size 819200 819200 bytes

  17. Max nice priority 0 0

  18. Max realtime priority 0 0

  19. Max realtime timeout unlimited unlimited us

  20. ## Max open files 标识当前Docker进程限制最大打开文件数量为655360 (注:此处值默认是65536,因为手动执行了修改所以大了10倍)

  21. ls -l /proc/14644/fd/* | wc -l ## 获取当前Docker进程已打开的文件数量

  22. 65342 #报错时该值达到了最大限制65536,此时查询已无故障现象

一键获取完整项目代码bash

.动态修改当前Docker进程的nofile限制,问题修复

 
  1. prlimit --pid 14644 --nofile=655360:655360 #将Docker进程的nofile限制调整为655360

  2. systemctl status docker #再次查询Docker进程状态发现问题已修复

一键获取完整项目代码bash

5.file-max 的修改

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

临时生效:

echo 100000000 > /proc/sys/fs/file-max    #动态修改当前系统最大可打开文件数量限制,也可以通过 /etc/sysctl.conf永久修改

一键获取完整项目代码bash

永久生效:

/etc/sysctl.conf 中增加

fs.file-max = 100000000 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值