今天性能测试时用Jconsole监控JVM内存情况(在JVM参数中添加:-Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.20.153.252),发现应用在跑了一段时间之后,Full GC越来越频繁,而且每次Full GC都无法完全回收内存,不可回收的内存对象越来越多,如下图所示:
于是用jmap查了查,发现[Ljava.lang.Object; [C; java.util.concurrent.ConcurrentHashMap$HashEntry; java.lang.String; java.util.ArrayList这5类对象数目不断增加,占用的内存越来越多,Full GC无法回收这些对象,如果一直这样压下去,肯定会发现内存泄漏~~~~
压到最后发生out of memory,虽然应用还没有挂,但大多数请求都TimeOut,偶尔有一小部分请求仍能成功,
Timeout错误:
- ERROR 09/28, 09:44:17 db.common.util.HttpInvokerUtil access url[http:
- java.net.SocketTimeoutException: Read timed out
- at java.net.SocketInputStream.socketRead0(Native Method)
- at java.net.SocketInputStream.read(SocketInputStream.java:129)
- at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
- at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
- at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
- at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
- at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
- at com.alibaba.udb.common.util.HttpInvokerUtil.invoke(HttpInvokerUtil.java:130)
- at com.alibaba.udb.client.BaseServiceClient.invoke(BaseServiceClient.java:92)
- at com.alibaba.udb.client.BaseServiceClient.invoke(BaseServiceClient.java:70)
- at com.alibaba.udb.client.PersonServiceClientImpl.getPersonProfileByLongId(PersonServiceClientImpl.java:93)
- at com.alibaba.udb.perf.TestMem.testMem(TestMem.java:69)
- at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at com.alibaba.udb.perf.AbstractServiceClient.invokeTest(AbstractServiceClient.java:37)
- at com.alibaba.udb.perf.TestMem.runTest(TestMem.java:94)
- at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:161)
- at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:346)
- at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:243)
- at java.lang.Thread.run(Thread.java:619)
- ERROR 09/28, 09:44:17 a.udb.client.BaseServiceClient java.net.SocketTimeoutException: Read timed out
- java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out
- at com.alibaba.udb.common.util.HttpInvokerUtil.invoke(HttpInvokerUtil.java:142)
- at com.alibaba.udb.client.BaseServiceClient.invoke(BaseServiceClient.java:92)
- at com.alibaba.udb.client.BaseServiceClient.invoke(BaseServiceClient.java:70)
- at com.alibaba.udb.client.PersonServiceClientImpl.getPersonProfileByLongId(PersonServiceClientImpl.java:93)
- at com.alibaba.udb.perf.TestMem.testMem(TestMem.java:69)
- at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
- at java.lang.reflect.Method.invoke(Method.java:597)
- at com.alibaba.udb.perf.AbstractServiceClient.invokeTest(AbstractServiceClient.java:37)
- at com.alibaba.udb.perf.TestMem.runTest(TestMem.java:94)
- at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:161)
- at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:346)
- at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:243)
- at java.lang.Thread.run(Thread.java:619)
- Caused by: java.net.SocketTimeoutException: Read timed out
- at java.net.SocketInputStream.socketRead0(Native Method)
- at java.net.SocketInputStream.read(SocketInputStream.java:129)
- at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
- at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
- at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
- at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
- at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
- at com.alibaba.udb.common.util.HttpInvokerUtil.invoke(HttpInvokerUtil.java:130)
- ... 13 more
此时的JVM情况:
jmap情况:
Jboss报异常:
- 21:43:11,947 WARN [MsgContext] Error sending end packet
- java.net.SocketException: Broken pipe
- at java.net.SocketOutputStream.socketWrite0(Native Method)
- at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
- at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
- at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:531)
- at org.apache.jk.common.JkInputStream.endMessage(JkInputStream.java:112)
- at org.apache.jk.core.MsgContext.action(MsgContext.java:293)
- at org.apache.coyote.Response.action(Response.java:182)
- at org.apache.coyote.Response.finish(Response.java:304)
- at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:204)
- at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
- at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
- at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
- at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
- at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
- at java.lang.Thread.run(Thread.java:619)
- 21:43:11,948 WARN [ChannelSocket] processCallbacks status 2
- 21:51:51,251 ERROR [STDERR] Exception in thread "InactivityMonitor Async Task: java.util.concurrent.ThreadPoolExecutor$Worker@23574efe"
- 21:51:51,251 ERROR [STDERR] java.util.concurrent.RejectedExecutionException
- color: black; background-color: inhe
分享到:
相关推荐
检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏 检测内存泄漏
windows下Qt creator 使用 VLD 工具的方法,下载 安装 使用 用浏览器打开
可以在codeproject.com网站上找到,相比其它的内存泄漏哦给你根据,他在检查内存泄漏的同事,还具有如下特点: 1) 可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在的文件及行号; 2) 可以得到...
介绍了使用内存泄漏检测工具valgrind的安装和使用,内附安装包,测试程序,使用说明文档。
检查内存泄露 检查内存泄露 检查内存泄露
内存检测代码,主要通过重载的方式检测已经实现的代码中是否有内存泄漏,详细细节见code,在这里不多作说明,毕竟空间不多啊,呵呵,一切尽在代码中
LeakDiag和LDGrapher,windows内存泄漏排查工具,用于进行一些泄漏位置的查找以及可视化展示。
推荐4款linux下的检测c语言编写的程序的内存泄漏工具 C语言和其他语言相比最大的特色就是能够操作内存 但是最常犯的错误也是内存泄漏(管杀不管埋) 所以我们需要用一些工具来帮助我们检测是否存在内存泄漏,存在多少 ...
c++检测内存泄漏的方法,检测内存泄漏的基本工具是调试器和 CRT 调试堆函数。
C++ 内存 泄露 检测器 对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题。已经有许多技术被研究出来以应对这个问题
使用Visual Leak Detector检查内存泄露 博客地址: http://blog.csdn.net/sunflover454/article/details/49761331
linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测
android检查内存泄露和用法 <!--==============================================================================--> android:name="com.squareup.leakcanary.internal.HeapAnalyzerService" android:enabled...
Linux 系统中valgrind检查内存泄露说明和安装包,只是简单的说明,使用方法说明中只是说明了一种检测内存泄漏问题的方法和语句
windows下c++内存泄露检测工具使用方windows下c++内存泄露检测工具使用方
如何检查内存泄漏: BoundsChecker 是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误。
本篇文章主要介绍了用Android Studio检测内存泄露的问题的解决方法,Android Studio在为我们提供了良好的编码体验的同时,也提供了许多对App性能分析的工具,下面我们一起来了解一下。
VC使用CRT调试功能来检测内存泄漏 C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话。在 C/C++ 应用程序...
1.由于MT4和MT5在运行应用程序(EA、指标、脚本)时,是不会报告内存泄漏的具体位置的。 2.如果在MQL代码中, 使用 new运算符,而忘记调用delete运算符来释放占用的内存,则会发生内存泄漏。 3.当开发复杂的程序时,去...
不容易看出内存泄露的时候,应该填加一定的代码,然后打印或查看调试信息来观察