溢出
这个服务本来是rpc提供方,但是消费端经常用着用着就说没有provider,期初没注意同事说重启下就好了,确实管用,但后来能用时间越来越少,重启后只能管几分钟,于是我不偷懒了,看下这个服务有什么问题,好家伙~一看原来是内存溢出,导致了rpc的socket链接都已经关闭了。报错如下:
代码语言:javascript复制2020-12-28 14:32:50.597 ERROR 36197 --- [pool-7-thread-1] o.a.h.i.n.c.InternalHttpAsyncClient 66 : I/O reactor terminated abnormally org.apache.http.nio.reactor.IOReactorException: I/O dispatch worker terminated abnormally
at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor.execute(AbstractMultiworkerIOReactor.java:359)
at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.execute(PoolingNHttpClientConnectionManager.java:194)
at org.apache.http.impl.nio.client.CloseableHttpAsyncClientBase$1.run(CloseableHttpAsyncClientBase.java:64)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.OutOfMemoryError: Java heap space
ver 10.12.25.107/10.12.25.107:2181, unexpected error, closing socket connection and attempting reconnect java.lang.OutOfMemoryError: Java heap space
at java.util.HashMap$KeySet.iterator(HashMap.java:912)
at java.util.HashSet.iterator(HashSet.java:172)
at sun.nio.ch.Util$2.iterator(Util.java:243)
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:358)
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141)
查看堆占用情况
代码语言:javascript复制jmap -heap pid
查看垃圾回收情况
代码语言:javascript复制jstat -gcutil pid 300 //每隔300毫秒打印一次
发现老年代使用如此之高,而且垃圾回收时间也很有问题,所以就是堆内存不够用了。 而随便一个正常的服务不会这么搞,一般也就是占用不到一半。向下面这样
从配置看,现在xmx 就给了4g,是明显不够用的,先扩展到6g看下情况。
修改后
继续查看:
明显降低了,至此问题解决。