当useFileMappedBuffer = true时,Jetty 7.4.5服务器泄漏文件描述符

时间:2012-06-11 21:22:09

标签: java linux jetty memory-leaks memory-mapped-files

我目前在Linux上运行Jetty 7.4.5.v20110725上的java webapp时遇到问题。从开始时间戳开始几天后,我的Web服务静态内容用完了文件描述符。我使用useFileMappedBuffer = true启动jetty服务器(在webDefaults.xml中)。我使用的是jdk1.6.0_30。如果您对如何解决此问题有任何建议,请与我们联系。

请注意,当useFileMappedBuffer = false(在webDefaults.xml中)时,不会发生此问题。

1 个答案:

答案 0 :(得分:0)

如果您的应用程序下次用完了时间戳,请尝试找出哪些文件是打开的,以及打开的连接是否导致问题。

尝试通过调用列出打开的文件(我认为它是lsof -p,但尝试或查看lsof联机帮助页,因为我正在写这篇文章):

lsof -p <jettypid>

这将显示jetty进程打开的文件。寻找可能已经关闭的文件等等。

然后做一个:

netstat -an 

这将显示已建立的网络连接。查看CLOSE_WAIT状态或类似情况下是否存在大量连接,表明连接未正确关闭。

还可以通过以下方式查看系统范围的操作系统限制:

ulimit -a

它将显示单个进程可以打开多少个文件描述符。如果您的网站流量很大且常见的默认值为1024 max fd,那么您可能需要提高它。如果您认为流量是问题,请查看本指南:http://wiki.eclipse.org/Jetty/Howto/High_Load

但是你已经说过问题确实只在几天之后才会发生。这通常表示未正确关闭连接,文件资源等。

如果不确定如何处理上述命令的输出,请随意粘贴它们。

独立于此问题,我建议您升级到最新的jetty 7.x。