运行 Apache Tomcat 的 Centos 不断收到“java.net.SocketException:打开的文件过多”

运行 Apache Tomcat 的 Centos 不断收到“java.net.SocketException:打开的文件过多”

我们在 CentOS 6 上运行 Apache Tomcat 7.0.41,java 版本为“1.7.0_21”。我们收到很多打开文件过多的错误,所以我做了一些研究。大家一致认为这与打开文件的数量有关。所以我做了以下事情:

  • 增加了 /etc/security/limits.conf 中的最大文件数

    soft     nofile         100000
    hard     nofile         100000
    
  • 重启服务器

  • 检查限制对于运行该进程的用户是否有效

    [app_admin@xxx ~]$ ulimit -Hn
    100000
    [app_admin@xxx ~]$ ulimit -Sn
    100000
    
  • lsof使用命令监视服务器上的打开文件

我观察到的是,当打开的文件总数达到大约 13000 个并且 tomcat 打开的文件数量约为 4500 个时,错误再次出现。

我很困惑。我以为这样就可以解决问题,但显然我不完全了解根本原因以及如何正确设置参数。

为了(可能)有帮助,我没有修改 Tomcat 的 server.xml 文件(尽管我很想这么做)。我不想开始摆弄它,让事情变得更糟。

如果有人能给我一些提示,告诉我从哪里开始寻找,我非常乐意分享更多信息。

答案1

我在 Tomcat 6 和 Java 6 中遇到了类似的问题,但我的 /etc/security/limits.conf 看起来像

tomcat           soft    nproc   2047
tomcat           hard    nproc   16384
tomcat           soft    nofile  1024
tomcat           hard    nofile  65536

tomcat 服务以什么tomcat用户身份运行。

相关内容