“Too many open ”错误与解决方法
一、问题现象
java.io.IOException: Too many open files
进入进程相应的日志,查看提示
二、解决思路
思路:这个案例涉及到linux下ulimit命令的使用,ulimit主要是用来限制进程对资源的使用情况的,它支持各种类型的限制。
-a |
显示当前系统所有的limit资源信息。 |
-H |
设置硬资源限制,一旦设置不能增加。 |
-S |
设置软资源限制,设置后可以增加,但是不能超过硬资源设置。 |
-c |
最大的core文件的大小,以blocks 为单位。 |
-f |
进程可以创建文件的最大值,以blocks 为单位. |
-d |
进程最大的数据段的大小,以Kbytes 为单位。 |
-m |
最大内存大小,以Kbytes为单位。 |
-n |
可以打开的最大文件描述符的数量。 |
-s |
线程栈大小,以Kbytes为单位。 |
-p |
管道缓冲区的大小,以Kbytes 为单位。 |
-u |
用户最大可用的进程数。 |
-v |
进程最大可用的虚拟内存,以Kbytes 为单位。 |
-t |
最大CPU占用时间,以秒为单位。 |
-l |
最大可加锁内存大小,以Kbytes 为单位。 |
Ulimit命令的配置文件在/etc/security/ulimit.conf;
Ulimit命令的修改用户最大可用进程数文件:/etc/security/ulimit.d/20-nproc.conf
当两个文件均修改用户最大可用进程数时以/etc/security/ulimit.d/20-nproc.conf为准。
三、问题原因
由于ulimit限制的添加时间晚于tomcat最后一次的启动时间,而在此期间内,tomcat服务一直未重启过,操作系统也一直未重启过,那么ulimit资源限制对于tomcat来说始终是不生效的。
解决过程:
[root@tomcatserver~]# pgrep–f tomcat
12031
[root@tomcatserver~]# ps-eopid,lstart,etime|grep12031
12031 Tue Apr 17 14:25:48 2018 47:03
[root@tomcatserver~]# stat /etc/security/limits.conf
重启进程即可