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