JVM虚拟机性能监测与故障处理工具简单介绍
2016-04-19 18:00
573 查看
JVM虚拟机性能监测与故障处理工具简单介绍
概述
前面两篇虚拟机相关的笔记,主要针对内存分配与回收技术介绍,这篇文章介绍几个常用有效的虚拟机监控工具。这些工具都放在都存在于jdk/bin下面,工具源码在jdk/lib/tools.jarJDK命令工具
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 的次数。相关文章推荐
- XP下使用虚拟机安装配置Solaris[多图]
- Java 6 JVM参数选项大全(中文版)
- VirtualBox虚拟机XP与宿主机Ubuntu互访共享文件夹
- Ubuntu 安装 JDK 问题
- Linux下三大免费桌面虚拟机评测
- 当存储无可用空间时无法启动虚拟机
- Windows 8虚拟机不能全屏的解决方法
- 用 GNOME Boxes 下载一个操作系统镜像
- android 使用虚拟机安装apk(图文教程)
- 深入解析JVM对dll文件和对类的装载过程
- Vmware虚拟机的安装及配置方法
- jdk与jre的区别 很形象,很清晰,通俗易懂
- jdk中String类设计成final的原由
- win7下安装 JDK 基本流程
- jdk环境变量配置
- 基于JVM 调优的技巧总结分析
- win2003 jsp运行环境架设心得(jdk+tomcat)
- windows linux jdk安装配置方法
- Java编程之jdk1.4,jdk1.5和jdk1.6的区别分析(经典)
- 详解JDK 5 Annotation 注解之@Target的用法介绍