Linux下tomcat报too many open files错误解决方法

问题描述 Tomcat日志中报too many open files导致程序无法读取文件错误。 报错原因 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值。 JAVA.IOException:打开的文件过多 经搜

问题描述

Tomcat日志中too many open files导致程序无法读取文件错误。

报错原因

出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值。

JAVA.IOException:打开的文件过多

经搜索,发现是由于linux默认设置的句柄数为1024,当并发量过大,就不够用了;

原因:

操作系统的中打开文件的最大句柄数受限所致,常常发生在很多个并发用户访问服务器的时候.因为为了执行每个用户的应用服务器都要加载很多文件(new一个socket就需要一个文件句柄),这就会导致打开文件的句柄的缺乏.

解决:

  • 尽量把类打成jar包,因为一个jar包只消耗一个文件句柄,如果不打包,一个类就消耗一个文件句柄.
  • java的垃圾回收不能关闭网络连接打开的文件句柄,如果没有执行close()(例如:java.net.Socket.close())则文件句柄将一直存在,而不能被关闭.你也可以考虑设置socket的最大打开数来控制这个问题.
  • 对操作系统做相关的设置,增加最大文件句柄数量。

增加最大文件句柄数量:

nofile(可打开的文件描述符的最大数)和nproc(单个用户可用的最大进程数量)

cp /etc/security/limits.conf /etc/security/limits.conf_bak

echo “### add by css ### ” >>/etc/security/limits.conf

echo “* soft nofile 65536” >>/etc/security/limits.conf

echo “* hard nofile 65536” >>/etc/security/limits.conf

echo “* soft nproc 65536” >>/etc/security/limits.conf

echo “* hard nproc 65536” >>/etc/security/limits.conf

重启系统,才能生效.

ulimit -a 查看所有设置

ulimit -u 65535(新的open files 值)修改设置

ulimit -n 65536 设置用户可以同时打开的最大文件数(max open files) 默认是2048

如果本参数设置过小,对于并发访问量大的网站,可能会出现too many open files的错误 。

使用lsof -p pid [httpd进程的 pid、java的pid]来查看系统中Apache进程和java运行时进程当前打开的文件资源:

lsof -p `ps -ef|grep tomcat|grep -v “grep –color=auto tomcat”|awk ‘{print $2}’` | wc -l

版权声明:(Linux下tomcat报too many open files错误解决方法)由互联网用户自发贡献,该文观点仅代表作者本人,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件标题或链接至 service#hao123w.com ,本站将立刻删除。
(0)
上一篇 2021年4月24日 上午2:49
下一篇 2021年4月24日 上午3:08
hao123w, hao123生活号 - 让生活更简单!,更多信息请访问 http://www.hao123w.com/