部署在tomcat上面的服务挂了,看了一下log是因为java.net.socketexception too many open files
方法一:修改ulimit
这个信息说明在你的OS中已经达到了打开的最大文件数量的限制值,最合适的方法是使用lsof来查看打开了哪些文件。一个快速的解决方法是增加全局文件的最大限制或是增加用户文件的最大限制或是同时增加两个。全局的在/proc/sys/file-max(我的系统中没有)中,用户限制在/etc/security/limits.conf中。
查看ulimit:
<span style="font-family:Microsoft YaHei;font-size:14px;">ulimit -n</span>
增加当前的缓存
<span style="font-family:Microsoft YaHei;font-size:14px;">ulimit -n 102400</span>
当tomcat并发用户量大的时候,单个jvm进程确实可能打开过多的文件句柄,查看方法,先使用lsof -i:8080,查看占用端口的PID,然后lsof -p 14421 | wc -l 查看打开的文件句柄 1581,超过了1024的限制,使用上述方法可当前生效,若长久生效可以改变配置文件中的信息。
具体持久修改的方法:
1.打开/etc/security/limits.conf,里面有很详细的注释,找到如下设置(如果没有就插入)
<span style="font-family:Microsoft YaHei;font-size:14px;">* soft nofile 102400
* hard nofile 102400</span>
limts.conf的格式为:
可以为用户名,组名(以@)打头,通配符* 匹配所有用户,但不包括root。root用户需单独添加一行。通配符%仅用于item为maxlogins限制。
为soft,hard和-,“-”表示二者都支持。
两个值:hard,硬限制,soft,软件限制,一般来说soft要比hard小,hard是底线,决对不能超过,超过soft报警,直到hard数。
2.编辑/etc/pam.d/common-session,加入一行(网络)
<span style="font-family:Microsoft YaHei;font-size:14px;">session required pam_limits.so</span>
/etc/pam.d/su(官方)
<span style="font-family:Microsoft YaHei;font-size:14px;">sudo vim /etc/pam.d/su</span>
将 pam_limits.so 这一行注释去掉 3.编辑/etc/profile,加入
<span style="font-family:Microsoft YaHei;font-size:14px;">ulimit -SHn 102400</span>
重启即生效。
方法二:
1、增加jvm内存的配置
Ubuntu:
vi catalina.sh
JAVA_OPTS='-Xms256m -Xmx1024m'
其中256为最小内存,1024为最大内存
2、在conf/server.xml中,改变connector的参数
<span style="font-family:Microsoft YaHei;font-size:14px;"><Connector port="8080"
maxThreads="3000" minSpareThreads="250" maxSpareThreads="4000"
enableLookups="false" redirectPort="8443" acceptCount="1"
disableUploadTimeout="true"
/></span>
参考:http://dailiang0515.iteye.com/blog/1936238