前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker报错 too many open files

Docker报错 too many open files

原创
作者头像
程哲
修改2021-10-11 10:21:31
4K0
修改2021-10-11 10:21:31
举报
文章被收录于专栏:ikubernetesikubernetes

在Linux系统内默认对所有进程打开的文件数量有限制(也可以称为文件句柄,包含打开的文件,套接字,网络连接等都算是一个文件句柄)

  1. 查看当前系统限制最大文件打开数量
代码语言:javascript
复制
cat /proc/sys/fs/file-max
10000000
  1. 查询当前系统已打开文件数量
代码语言:javascript
复制
cat /proc/sys/fs/file-nr
69312   0       100000000    # 左边的值为当前系统已打开文件数量,中间的不用管,右侧表示当前系统限制最大文件打开数

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

  1. 查询当前Docker进程最大可打开文件数量及已打开文件数量
代码语言:javascript
复制
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,此时查询已无故障现象
  1. 动态修改当前Docker进程的nofile限制,问题修复
代码语言:javascript
复制
prlimit --pid 14644 --nofile=655360:655360    #将Docker进程的nofile限制调整为655360 

systemctl status docker #再次查询Docker进程状态发现问题已修复
  1. 补充
代码语言:javascript
复制
1. echo 100000000 > /proc/sys/fs/file-max    #动态修改当前系统最大可打开文件数量限制,也可以通过 /etc/sysctl.conf永久修改

2. 也有可能是systemd对进程进行了限制,可修改service文件(通常位于/etc/systemd/system 目录下)
		在 [Service] 下面添加 LimitNOFILE=20480000  ,修改完成后执行 systemctl daemon-reload 使配置生效

3. inotify达到上限
		fs.inotify.max_user_instances   #表示每个用户最多可以创建的inotify instance数量
    fs.inotify.max_user_watches     #标识每个用户同时可以添加的watch数目
    当以上方法都无法解决  too many open files 问题时,可以尝试通过修改这两个内核参数,修改/etc/sysctl.conf生效

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档