请教。如何结合 java 自带的 jvisualvm 分析系统性能,及优化

2015-08-21 19:59:09 +08:00
 CheungKe

ps: 硬件环境 aliyun ECS , 2 core , 4g

3530 次点击
所在节点    Java
7 条回复
CheungKe
2015-08-21 20:31:09 +08:00
再来一张现在的截图
![]( http://imgur.com/YoFo5rB )
stevegy
2015-08-21 20:49:12 +08:00
这么频繁的 GC ? 10 分钟 1 次? 1G 的 heap 可能太少。。。不过照这个趋势, 2G 也撑不过 20 分钟。。
第二套监控的 memory 貌似一直在 1G ,有大量线程运行时间超长。。。这个可以在 visualVM 里看到是哪些线程运行这么长时间。。。
要么是这个系统确实很大负载。。。但先看看那些运行时间猛涨的线程吧
coolcfan
2015-08-21 21:42:59 +08:00
有插件可以装,比如 VisualGC 插件能显示出分代的 GC 状况。

当然仅仅看图表是不够的;可以用这些插件来直接获取 Thread Dump 、 Heap Dump 并且在 VisualVM 的界面里浏览;还可以做 CPU Sampling/Profile 来研究一段时间内的运行情况。
CheungKe
2015-08-21 22:23:33 +08:00
@stevegy
1. 没有接触过其他程序,不知道什么指标算正常?
现在 jvm 设置为 -Xms2g -Xmx2g 。看起来比较正常。

2.有 10 个线程是在不停的转储图片,并带有一些校验和翻转,都是长任务。

3.现在还附加了个投票功能,每天 10w 票不到。
![]( )
stevegy
2015-08-22 07:39:47 +08:00
第三张图的负载不高
图二是明显在 7:45 开始有比较高的负载,然后开始有大量的 GC , jvm heap 基本用完了。照这个负载, 2G heap 还是有必要的
CheungKe
2015-08-22 10:08:12 +08:00
这台机器是 4g 的内存,是部署 4 个 tomcat x 1g ,还是 2 x 2g ,或者 1 x 4g ,哪个更好
cloud107202
2015-08-22 10:38:06 +08:00
GC 频繁,堆内存设置的不够往往是表象。有一种常见的原因是系统里个别对象产生过快,而消费速度跟不上生产速度。找一找代码中哪些逻辑会快速生成大量对象,在处理时候,这些对象可以放到有界阻塞队列里限制一下总数量。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/214967

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX