背景
 
在一次Linux系统中配置Java服务运行过程中,程序不能正常启动,报错(Too many open files)
解决方法
 修改服务的LimitNOFILE配置
 vim /usr/lib/systemd/system/xxx.service
[Service]
 LimitNOFILE=65535
  
重启xxx服务,解决问题
systemctl restart xxx
扩展
nproc、nofile的含义
 nproc: 单个用户可用的最大进程数量
 nofile: 可打开的文件描述符的最大数
 如果超过限制值,出现的错误描述
nproc:
 Cannot create GC thread. Out of system resources  
 java.lang.OutOfMemoryError: unable to create new native thread
nofile:
 Too many open files
 配置并生效
 修改系统配置 (需要重启)
 vim /etc/security/limits.conf
 # * 代表全部用户
*              soft    nofile  65536
 *              hard    nofile  65536
 baseuser        hard    nproc   65536
 baseuser        soft    nproc   65536
 控制台修改(不需要重启)
 ulimit -u 65535
 对于通过系统服务启动的程序(通过systemctl启动,修改配置后需求重启服务)
 如果不进行设置,默认配置为1024,改配置不受 系统配置影响,因此会出现系统配置限制调大,但是通过服务启动的进程,依然报错
对特定服务进行控制
 vim /usr/lib/systemd/system/xxx.service
[Service]
 LimitNOFILE=65535
 LimitNPROC=65535
配置查看命令
- 进程实时打开文件数
lsof -p {PID} |wc -l
- 进程最大可打开文件数
cat /proc/{PID}/limits
- 系统可打开文件数限制
cat /proc/sys/fs/file-max
- 查看当前限制配置
ulimit -u