VisualVM - 分析机器上app,CPU,memory运行情况
Apache JMeter - load test 工具,用于人工生成traffic,重现问题
Youkit/Eclipse Profiler - 分析内存泄漏memory leak
本问题是一个网站有memory leak的问题,导致heap memory usage在deployment后都一直上升
步骤
1. 用JMeter产生traffic,且用VisualVM观察问题是否重现且确认收集够数据,就停止收集
2. copy heap dump到安装了Youkit的机器
3. 用Youkit分析memory。发现有大量duplicate objects(Youkit定义是equal field by field或者数组元素一样)。打开QueryLogReporter可以发现这些重复对象都是来源于某一个class。
分析代码后发现,我们用了HTTP intercepter来拦截所有request然后将这些metrics放入一个MetricsManager的对象中,而这些对象并没有有效被删除,导致在ThreadLocal上累积。
找到根本原因后,我们在代码中在每次收集HTTP request后调用这个manager的一个delete函数。