ulimit 命令。ulimit用于限制shell启动进程所占用的资源,更多命令见百度
问题
程序的log文件中有如下错误:
log4js.fileAppender - Writing to file log_file.log, error happened { Error: EMFILE: too many open files, open ‘log_file.log’
大致意思是说有太多的文件已打开,已经不能再打开了。
解决
通过 ulimit -n
命令可以查看linux系统里打开文件描述符的最大值,一般缺省值是1024,但是对一台服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值。
- 这个值可使用
ulimit
命令来修改,如:
ulimit -n 1024000
但上述命令修改的数值只对当前登录用户的目前使用环境有效,系统重启或者用户退出后就会失效。
- 永久生效需要进行下面设置:
vi /etc/security/limits.conf
追加如下内容:
* soft nofile 1024000
* hard nofile 1024000
其中 * 代表所有用户。
重新登录,通过ulimit -n
或者 ulimit -a
命令查看是否生效
# 查看当前系统文件句柄数
cat /proc/sys/fs/file-nr
# 输出示例:9344 0 2097152 → 当前已用/未回收/系统上限
关联问题:accept4() failed (23: Too many open files in system)