VisualVM:多合一故障处理工具,功能比较全面的一个工具,与其它的检测工具相比,对实际性能影响很小,并且还具备安装插件功能。这个工具和前面介绍的JConsole工具有很多类似的功能,但是比JConsole功能更全面,朋友们可以自己到JDK的bin目录下找到jvisualvm.exe进行测试。
这里简单介绍两个比较有用的插件。
一个是Visual GC,可以堆内存的使用有一个更全面的监控,包括类的编译,加载,垃圾收集,内存使用都有一个更直观的展现。
另一个是BTrace动态日志跟踪,可以在不影响程序运行的情况下,添加代码,对运行中的程序内容进行监控。
(右键点击要操作的应用进程,在弹出的页面选择Trace Application,进入BTrace面板)
插件的安装可以直接打开“菜单-插件”,然后在弹出的界面中“可用插件”栏选中自己想要安装的插件,然后点击安装,安装完成后重新启动就可以了。
书中的第五章介绍了一些调优案例,这里就不一一介绍了,有时间的朋友推荐看一看,笔者看完之后还是有蛮多收获的。
![](/qrcode.jpg)
根据实际的项目经历和体会,整理了以下几点:
1. 并不是程序运行的堆设置的越大越好;缺点:堆设置的越大,会导致垃圾收集需要处理的对象越多,反而停顿的时间越长。
为了不浪费硬件资源,可以考虑集群部署,将每个应用程序分配一个相对较合适的堆空间。
另外,这里还提到了一个问题,那就是64位的JDK比32的JDK,64位和32位支持的内存容量。32位性能更好
2. 对应集群部署的应用,当访问量比较大的时候,由于网络等原因同步失败,一般的情况下,同步失败将会进行重试,大量的重发数据积累在堆中,导致堆内存溢出。
3. 如果程序中存在频繁的调用本地方法的操作,比如IO操作等,这个时候会使用直接内存,当调用本地方法不注意内存的及时关闭等,也会出现直接内存的溢出情况。
4. 当服务程序需要调用其它系统的接口时,由于对方系统访问速度较慢,导致积压了大量的服务没有完成,这个有点类似于第二条,也会导致虚拟机进程崩溃。
到这里,内存管理部分的笔记就到这里,由于工具类的东西,很多还需要大家亲自动手去试一下,并没有很细。接下来将学习第三部分,虚拟机执行子系统部分,将会比较细致。
喜欢文章或想一起学习的朋友可以关注我,给我点赞,我将会持续更新,有什么疑问或文中有不当之处请给我留言,真诚地希望能与大家一起交流探讨,学习进步。