Apache 和 java/tomcat 的“打开文件过多”。如何设置每个进程的限制?

Apache 和 java/tomcat 的“打开文件过多”。如何设置每个进程的限制?

这个问题现在在我的生产 Ubuntu 机器上出现了两次,该机器运行节点服务器(小型)和 Spring Boot Java 服务器(主力)。第一次发生这种情况时,我的服务器停了下来,我发现该文件/proc/sys/fs/file-max的值808286对我来说似乎完全合理,但我还是将其增加到,2097152然后不记得之后我做了什么(这是一年前的好事情)或如此?)但我可能要么重新启动服务器,要么至少重新启动我的服务并解决问题。今天它又回来困扰我了。重新启动我的 Java 服务暂时解决了该问题,但我想了解发生了什么以避免将来出现这种情况。

  • /etc/security/limits.conf文件是我安装的 Ubuntu 的默认文件,因此只是一个注释文件,因此无需在此处重现。
  • Java 服务由用户运行tomcat
  • 阿帕奇由 运行root。这会将流量定向到节点或 Spring Boot 服务。

我的系统上一些相关命令的结果......

$ ulimit -Sn
1024

$ ulimit -Hn
1048576

$ sudo su tomcat

$ ulimit -Sn
1024

$ ulimit -Hn
1048576

附带问题,为什么我的硬限制一半中设置的值/proc/sys/fs/file-max

但现在,如果我查看每个进程的限制,我会得到以下结果......

$ cat /proc/<tomcat_java>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            4096                 4096                 files

$ cat /proc/<root_apache>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            8192                 8192                 files     

$ cat /proc/<my_random_process>/limits
Limit                     Soft Limit           Hard Limit           Units     
Max open files            1024                 1048576              files     

那么,这是怎么回事?我能找到的唯一关注我设置的 file-max 的进程是我自己的进程。 (我上面使用的“随机”进程是我的 bash shell)。 apache和java的这些限制从何而来。我当然可以看到超出了上面的 4096 限制(这可能是我的问题),但我不知道如何让它使用系统设置的限制。

感谢您对此的任何帮助。

答案1

你的问题看起来像如何使用 systemd 设置服务的 ulimit?- 需要在 Apache Tomcat 服务器的启动脚本中解决打开文件限制问题。例如:假设Ubuntu机器使用systemd,可以通过编辑启动脚本文件将tomcat java进程的打开文件限制增加到65000,如下所示:

/etc/systemd/system/tomcat.service:

[Unit]
Description=Tomcat Service
After=syslog.target network.target

[Service]
Type=forking
User=tomcat
Group=tomcat
LimitNOFILE = 65000      <---------
....
[Install]
WantedBy=multi-user.target

重新加载守护进程并重新启动 tomcat 服务器...

systemctl daemon-reload
systemctl restart tomcat

验证一下,类似的东西...

pstree -pu |grep tomcat
       |-java(23638,tomcat)-+-{java}(23645)
grep open /proc/23638/limits
Max open files            65000                65000                files

相关内容