我使用的是jetty版本8.1.8.v20121106
并且部署了一个非常简单的spring mvc应用程序。在服务器正常运行期间,内存 promise 不断增加,直到服务器出现故障。
随着时间的推移,线程也急剧增加
我有很多 sleep
和等待事件线程
,正如您在此处看到的
root 1568 2.9 12.4 14014884 4111368 ? Sl 10:03 0:07 /usr/bin/java -Djetty.home=/opt/jetty/jetty -Djava.io.tmpdir=/tmp -javaagent:/home/ydadmin/newrelic/newrelic.jar -jar /opt/jetty/jetty/star
root 1568 0.7 12.4 14014884 4111368 ? Sl 10:03 0:02 /usr/bin/java -Djetty.home=/opt/jetty/jetty -Djava.io.tmpdir=/tmp -javaagent:/home/ydadmin/newrelic/newrelic.jar -jar /opt/jetty/jetty/star
root 1568 0.0 12.4 14014884 4111368 ? Sl 10:03 0:00 /usr/bin/java -Djetty.home=/opt/jetty/jetty -Djava.io.tmpdir=/tmp -javaagent:/home/ydadmin/newrelic/newrelic.jar -jar /opt/jetty/jetty/star
root 1568 0.0 12.4 14014884 4111368 ? Sl 10:03 0:00 /usr/bin/java -Djetty.home=/opt/jetty/jetty -Djava.io.tmpdir=/tmp -javaagent:/home/ydadmin/newrelic/newrelic.jar -jar /opt/jetty/jetty/star
我假设这是因为缺乏 jetty 池并且没有关闭旧连接,但为什么以及如何解决这个问题?我的配置当前如下所示:http://pastebin.com/NDrUKwCv
如何找出导致此问题的原因?
更新:在jsstack
中发现了很多这样的线程,也许这些可以提供帮助
最佳答案
在分析了我使用线程的所有部分后,我发现我错过了关闭一个Executor
,这对垃圾收集来说是不利的。
ExecutorService executor = Executors.newFixedThreadPool(2);
// ...
executor.shutdown()
关于java - 使用 Jetty 8 内存 promise 不断增加,直到服务器因 spring 缓存而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16768971/