在linux上使用jetty 9时打开的文件过多(ubuntu)

2 ubuntu jetty

我有一个运行grails应用程序的jetty 9.1.3服务器.在os x上测试一切都很好但是在ubuntu上我注意到它正在打开大量的文件

如果我跑

lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head 
Run Code Online (Sandbox Code Playgroud)

我看到两个平台:

OS X:

423 1561

Ubuntu的

27393 15238

然后,我运行了一个完整的lsof来查看使用了哪些文件,我看到重复的条目,如:

java 15238 16672 jetty mem REG 202,1 575389 1239666 /tmp/jetty-0.0.0.0-8080-root.war-_-any-6199673264702494065.dir/webapp/WEB-INF/lib/commons-collections-3.2.1.罐

java 15238 16672 jetty 159r REG 202,1575389 1239666 /tmp/jetty-0.0.0.0-8080-root.war-_-any-6199673264702494065.dir/webapp/WEB-INF/lib/commons-collections-3.2.1.罐

这个模式在lsof输出中反复重复,它发生在类路径上的每个jar:

grep commons-collections lsof.log | wc -l
Run Code Online (Sandbox Code Playgroud)

138

任何人都可以解释这里可能发生的事情以及如何解决它?

use*_*841 6

我遇到了同样的问题.我在Jetty 7,Jetty 8,Jetty 9.0.2和Jetty 9.1.5(总是在Ubuntu上)部署了我的grails应用程序.所有Jetty版本都可以正常工作,除了最后一个Jetty 9.1.5.Windows 7上的Jetty 9.1.5也运行正常.所以似乎在Ubuntu上Jetty 9.1.x存在问题.

我修复了编辑/etc/security/limits.conf文件的问题.首先运行以下命令:

ulimit -n
Run Code Online (Sandbox Code Playgroud)

这将告诉您最大文件打开限制(在我的情况下为1024).以root身份编辑/etc/security/limits.conf文件并添加以下两行:

* soft nofile 65535
* hard nofile 65535
Run Code Online (Sandbox Code Playgroud)

要使更改生效,您应关闭终端会话并打开一个新会话.您可以ulimit -n再次运行该命令以确保更改.现在再次启动Jetty并检查它是否运行正常.这样做对我来说.