java - 使用 Jetty 8 内存 promise 不断增加,直到服务器因 spring 缓存而失败

标签 java spring memory-leaks jetty

我使用的是jetty版本8.1.8.v20121106并且部署了一个非常简单的spring mvc应用程序。在服务器正常运行期间,内存 promise 不断增加,直到服务器出现故障。

Memory commitment over time

随着时间的推移,线程也急剧增加

enter image description here

我有很多 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中发现了很多这样的线程,也许这些可以提供帮助

http://pastebin.com/7Ybt5NCv

最佳答案

在分析了我使用线程的所有部分后,我发现我错过了关闭一个Executor,这对垃圾收集来说是不利的。

ExecutorService executor = Executors.newFixedThreadPool(2);
// ...
executor.shutdown()

关于java - 使用 Jetty 8 内存 promise 不断增加,直到服务器因 spring 缓存而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16768971/

相关文章:

java根据应用程序需求同步集合选择

java - STS(Spring Tool Suite) 和 Eclipse

ajax - 将 Map<String,String> 传递给 springMVC Controller

c - C内存读写BMP文件错误

c - 如何使用valgrind检测自定义alloc/free的内存泄漏?

ios - 使用 Xcode Instruments 从内存地址打印对象

Java 1.4.2 - 读取文件

java - MySQL 多重查询

java - 如何在显示 android 后更改自定义对话框中 View 的可见性

java - 如果您的数据库层只有 JDBC,是否值得使用 Spring?