我有一个运行grails应用程序的jetty 9.1.3服务器。在os x上测试一切都很好但是在ubuntu上我注意到它打开了大量的文件
如果我跑
lsof | awk '{ print $2; }' | sort -rn | uniq -c | sort -rn | head
我在两个平台上看到:
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.jar
java 15238 16672 jetty 159r 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.jar
这个模式在lsof输出中一遍又一遍地重复,它发生在类路径上的每个jar:
grep commons-collections lsof.log | wc -l
138
任何人都可以解释这里可能发生的事情以及如何解决这个问题吗?
答案 0 :(得分:5)
我遇到了同样的问题。 我在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
这将告诉您最大文件打开限制(在我的情况下为1024)。 以root身份编辑/etc/security/limits.conf文件并添加以下两行:
* soft nofile 65535
* hard nofile 65535
要使更改生效,您应关闭终端会话并打开一个新会话。
您可以再次运行ulimit -n
命令以确保更改。
现在再次启动Jetty并检查它是否运行正常。
这样做对我来说。