JVM虚拟机性能监测与故障处理工具简单介绍

JVM虚拟机性能监测与故障处理工具简单介绍

概述

  • 前面两篇虚拟机相关的笔记,主要针对内存分配与回收技术介绍,这篇文章介绍几个常用有效的虚拟机监控工具。这些工具都放在都存在于jdk/bin下面,工具源码在jdk/lib/tools.jar
JDK命令工具
  • jps(进程状况工具):jdk很多小工具名字都参照了unix系统。该名字与unix的ps命令比较相似,功能也差不多,主要查询jvm中运行的进程。并且列出进程名与唯一的ID。
  • jstat(统计信息监视工具):比如查看内存分配情况,垃圾回收等信息。
  • jinfo(java配置信息工具):实时查看和调整虚拟机的各项参数,以及可以显示虚拟机默认的参数设置。-v,-flag, -flag name=value都是常用参数。
  • jmap(java内存映像工具):1.生成堆转储快照(dump文件);2.查询java堆与方法区的详细信息,如空间使用率,当前使用的收集器等等。-dump,-heap,-histo(显示对象统计信息,包括类,实例数量,合计容量)。
JDK可视化工具
  • JConsole(java监视与管理控制台):在jdk/bin 下面启动该工具,选择一个应用进程之后,可以看到监控的内容包括:内存,线程,类,CPU占用率,VM概要,MBean。
  • VisualVM(多合一的故障处理工具):这是一款功能比较丰富的监视和故障处理了工具,plugins式扩展插件的安装,可以做到以下工作:
  • 1.显示虚拟机进程的配置,环境信息(jps,jinfo)
  • 2.监视应用程序的CPU,GC,堆,方法区以及线程的信息(jstat,jstack)
  • 3.dump以及分析堆转储快照(jmap,jhat).
  • 4.离线程序快照的分析。

  • MAT:eclipse插件最新插件下载地址为:MAT - http://archive.eclipse.org/mat/1.4/update-site/

系统性能问题调优场景及考虑点
场景1:高性能机器部署反而效率降低
  • 如果硬件内存比较大,将jvm的对设置比较大的时候,系统效果不理想,可能不定期出现长时间的失去响应。
  • 分析场景:(1)可能采用的是关注吞吐量的收集器。导致停顿时间太长。(2)因为换了大内存,每次回收G级别的内存,需要耗费很多时间。(3)可能有大量的大对象,这些大对象在老年代,没有在Minor GC的时候清理掉,导致内存消耗较大。
  • 大内存需要考虑点:(1)内存回收导致的长时间停顿。(2)64位JDK性能普遍低于32位JDK。(3)大内存的情况下,要保证程序足够稳定,因为十几G的dump文件没有办法做分析的。
场景2:堆外内存导致溢出
  • 很多时候,设置堆内存的时候过大,系统运行的时候通过jstat监控发现所有的内存分配都没有问题,结果还抛出了内存溢出情况。这时候就要考虑除了堆内存溢出,还有可能是直接内存溢出抛出的异常的情况。
  • 从实践角度出发,出了java堆内存和方法区内存外,还有以下区域会占用较多的内存:(1)direct memory 直接内存。特别在出现nio读写操作的时候,此内存很容易出现溢出,所以要有足够的预留空间。(2)线程栈溢出,-Xss调整,如果太小可能导致无法分配栈帧或者无法建立新的线程(3)Socket缓存区,每个Socket都有Receive和Send两个缓存区,分别大约37KB与25KB.如果连接数大,这部分内存已很客观,如果溢出抛出IOException.
  • 不恰当的数据结构导致内存占用过大,辟如业务上有时候需要定时加载大数据文件到内存创建索引,这时候产生100万条HashMap

小结

  • (1)写代码的时候,要少使用大对象,特别是朝生夕死的大对象。(2)减少full gc 的次数。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值