虚拟机的应用案例

核心提示VisualVM:多合一故障处理工具,功能比较全面的一个工具,与其它的检测工具相比,对实际性能影响很小,并且还具备安装插件功能。这个工具和前面介绍的JConsole工具有很多类似的功能,但是比JConsole功能更全面,朋友们可以自己到JD

VisualVM:功能全面的一体化故障处理工具。与其他检测工具相比,对实际性能影响不大,而且还具有安装插件的功能。这个工具与前面介绍的JConsole工具有许多相似的功能,但是它比JConsole更全面。朋友们可以在JDK的bin目录下找到jvisualvm.exe进行测试。

这里有两个有用的插件。

一个是可视化GC,可以更全面的监控堆内存的使用情况,包括类编译、加载、垃圾回收、内存使用等。

另一种是BTrace动态日志跟踪,可以在不影响程序运行的情况下,添加代码来监控正在运行的程序内容。

插件可以直接安装,打开“菜单-插件”,然后在弹出的界面中的“可用插件”一栏中选择想要安装的插件,然后点击安装,安装完成后重启即可。

书中第五章介绍了一些调优案例,这里就不一一介绍了。有时间的朋友推荐看看。看完之后,作者还是很有收获的。

根据实际项目经验和体会,整理出以下几点:

1.并不是程序设置的堆越大越好;缺点:堆设置越大,垃圾收集需要处理的对象越多,但是暂停时间越长。

为了不浪费硬件资源,可以考虑集群部署,给每个应用分配一个相对合适的heap 空空间。

另外这里提到一个问题,就是64位JDK比32位JDK、64位、32位支持更大的内存容量。32位性能更好

2.对于部署在集群中的应用,当访问次数相对较多时,由于网络等原因,同步失败。一般情况下,同步失败会重试,大量重传的数据会堆积在堆中,导致堆内存溢出。

3.如果程序中频繁调用本地方法,比如IO操作,此时会使用直接内存。当调用局部方法而不注意及时关闭内存时,也会直接发生内存溢出。

4.当服务程序需要调用其他系统的接口时,由于对方系统访问速度较慢,导致大量服务未完成,与第二种有些类似,也会导致虚拟机进程崩溃。

至此,内存管理部分的笔记就在这里了。因为工具的原因,很多都需要自己去尝试,不是很详细。接下来我们将学习第三部分,虚拟机执行子系统,这个部分会更详细。

喜欢文章或者想一起学习的朋友可以关注我,赞我,我会不断更新。如果你对文章有任何问题或不合适的地方,请给我留言。真心希望能和大家交流探讨,学习进步。

 
友情链接
鄂ICP备19019357号-22