我有一个使用spring框架(使用SpringToolSuite)开发的webapp,它部署在JBoss 7.1.1.Final服务器上。 该应用程序运行良好一段时间,但一段时间后(取决于负载)jvm崩溃。我意识到如果java进程的内存消耗非常高,就会发生这种情况。有趣的是,堆(使用visualvm,java任务控制等进行检查)是稳定的而不是增加。也没有堆空间错误或类似的东西。 使用visualvm我看到一个名为“RMI TCP连接”的线程正在消耗最大量的内存,并且它每秒都会得到更多。如果我只运行Spring Tool Suite附带的默认spring应用程序,也会发生这种情况。
所以我的问题是什么导致这个线程消耗这么多内存,为什么不刷新/释放内存。
线程转储的跟踪如下:
"RMI TCP Connection(3)-10.1.3.19" #23 daemon prio=5 os_prio=0 tid=0x09b08c00 nid=0x1de4 runnable [0x0988f000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
- locked <0x060c3768> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:83)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:539)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Locked ownable synchronizers:
- <0x060c38e0> (a java.util.concurrent.ThreadPoolExecutor$Worker)