我们在Tomcat上部署了一个Web应用程序,该应用程序可以具有超过300k的文件描述符,而单个进程的限制为250k。
奇怪的是:当服务器运行时,该数字上升(400k),而下降(100k)。有时,当数量很高时,我们无法进入操作系统。但是,我们没有发现与许多打开的文件或套接字建立问题有关的任何错误。
大多数文件描述符与JVM加载的jar文件有关。我的问题是:
1. OS(CentOS 7)如何计算tomcat的文件描述符?我认为Tomcat在运行时不会使这些文件保持打开状态。
2.为什么数量不固定?相反,有很多重复的jar文件。
3.拥有这么多文件描述符是否正常?
答案 0 :(得分:1)
操作系统对任何一个进程可以同时打开的文件数量有限制。大多数发行版的默认文件只有 1024 个文件。每个打开的文件还具有关联的文件描述符。套接字连接被视为文件,它们使用文件描述符,因此受到相同的资源限制。
您可以通过命令ulimit
验证或更改最大限制。
您还可以查看MBean属性的值- 通过运行JMX工具JConsole MaxFileDescriptorCount 和 OpenFileDescriptorCount 。
当OpenFileDescriptorCount小于MaxFileDescriptorCount时
您的应用程序可以正常工作,否则您将得到java.io.IOException: Too many open files
,这会导致您的应用程序出现故障。
通常对于应用程序,FD(文件描述符)的计数 上升/下降到一定水平。但这应该在 MaxFileDescriptorCount。