ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 垃圾收集行为怪异

2019-06-27 12:58:05  阅读:249  来源: 互联网

标签:java memory garbage-collection performance hybris


我刚刚接触了一个项目,他们让我调查为什么服务器(应用程序)表现得很奇怪.重新启动后,它们非常快(响应时间小于150毫秒),但是当它们运行大约2天时,它们变得很慢.

内存和CPU上升,在重新启动应用程序之前不会丢失.

因此,他们正在运行Tomcat(hybris)服务器,该服务器具有以下命令行标志:
-XX:ConcGCThreads = 1 -XX:G1HeapRegionSize = 4194304 -XX:GCLogFileSize = 786432 -XX:InitialHeapSize = 12884901888 -XX:ManagementServer -XX:MaxGCPauseMillis = 200 -XX:MaxHeapSize = 12884901888 -XX:NewRatio = 4 -XX:NumberOfGCLogFiles = 10 -XX:-OmitStackTraceInFastThrow -XX:ParallelGCThreads = 4 -XX:ParallelRefProcEnabled -XX:PrintGC -XX:PrintGCDateStamps -XX:PrintGCTimeStamps -XX:PrintTenuringDistribution -XX:ReservedCodeCacheSize = 134217728 -XX:ThreadStackSize = 1024 -XX:UseCodeCacheFlushing – XX:UseCompressedClassPointers -XX:UseCompressedOops -XX:UseG1GC -XX:UseGCLogFileRotation -XX:UseTLAB

在下图中,您可以看到重启前后的CPU和内存使用情况.应用服务器已经负载了几个小时……

CPU & Memory usage

Heap & Eden Heap Usage

Old Gen Heap Usage

Garbage Collection CPU time

应用程序服务器本身是一个4核,16GB RAM.

两次重启之间的完整运行截图:

CPU & Memory usage

Heap & Eden Heap usage

Old Gen Heap usage

Garbage Collection CPU time

解决方法:

您的应用程序有内存泄漏.

这不是垃圾收集器(GC)问题,而是应用程序中的错误.这意味着创建了一些对象,但未使用GC进行清理,因为它们的引用链接仍然存在于您的应用程序中.您应该调查哪些对象未清理,并跟踪它们的创建方式以及引用的位置.

正如您提到的TomCat,我首先会检查Servlet(或者如果您使用Spring的控制器和服务)来检查类属性变量.

标签:java,memory,garbage-collection,performance,hybris
来源: https://codeday.me/bug/20190627/1305072.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有