问题描述:
我们经常遇到系统报错too many open files ,too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,有一定Linux系统运维经验的人都知道,Linux一切都是文件,这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制,通常我们可以通过增大允许打开的文件数方式来搞定它,但是如果docker容器里面的应用报错怎么办呢?
问题解析:
docker容器默认继承dockerd的最大文件打开数设置(而非操作系统),所以默认一般都比较小。
解决思路:
docker 默认提供了参数用于设置容器的最大文件打开数设置,可以使用 –ulimit 标志进行设置,–ulimit 使用软限制和硬限制指定,例如:<type>=<soft limit>[:<hard limit>],其中type一般有两种:
nproc : 是操作系统级别对每个用户创建的进程数的限制
nofile : 是每个进程可以打开的文件数的限制
soft limit表示软限制,hard limit表示硬限制,如果不提供硬限制,则软限制用于两个值。
示例如下:
docker run –name memcached -p 11211:11211 –ulimit nofile=65535:65535 -d registry.gfstack.geo:5555/memcached:1.5.15-20200728