- 浏览: 239138 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
Wangwei86609:
非常好的规则引擎框架,支持决策树和多线程运行规则https:/ ...
规则引擎 -
xl6861989:
2 楼正确
Maven中<dependencies>节点和<dependencyManagement>节点的区别 -
cuitengfei2006x:
抄别人的有意思吗
hadoop MapReduce join -
rainbow_小春:
写的真心赞,向你学习,学着自己写一些东西
hadoop MapReduce join -
zsx0321:
outputStreamReader 应改为OutputStr ...
从装饰者模式的理解说JAVA的IO包
性能测试过程中,我们该如何监控java虚拟机内存的使用情况,用以判断JVM
是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到
java应用程序。
在项目实践过程中,我们探索和使用了一款新工具--Jstat。
先秀一下。Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics
monitoring
tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap
size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。
那,该怎么用呢?
语法结构如下:jstat [Options] vmid [interval] [count]
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count — 打印次数,如果缺省则打印无数次
下面给出一个实际的例子:
注:由于JVM内存设置较大,图中百分比变化不太明显
图中参数含义如下:
S0 — Heap上的 Survivor space 0 区已使用空间的百分比
S1 — Heap上的 Survivor space 1 区已使用空间的百分比
E — Heap上的 Eden space 区已使用空间的百分比
O — Heap上的 Old space 区已使用空间的百分比
P — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
上图的示例,红框中,我们可以看到,5次young gc之后,垃圾内存被从Eden space区(E)放入了Old space区(O),并引起了百分比的变化,导致Survivor space使用的百分比从19.69%(S0)降到10.34%(S1)。有效释放了内存空间。绿框中,我们可以看到,一次full gc之后,Old space区(O)的内存被回收,从36.81%降到35.01%。
图中同时打印了young gc和full gc的总次数、总耗时。而,每次young gc消耗的时间,可以用相间隔的两行YGCT相减得到。每次full gc消耗的时间,可以用相隔的两行FGCT相减得到。例如红框中表示的第一行、第二行之间发生了1次young gc,消耗的时间为52.281-52.252=0.029秒。
常驻内存区(P)的使用率,始终停留在37.6%左右,说明常驻内存没有突变,比较正常。
如果young gc和full gc能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java内存释放情况正常,垃圾回收及时,java内存泄露的几率就会大大降低。 但也不能说明一定没有内存泄露。
以上,介绍了Jstat按百分比查看gc情况的功能。其实,它还有其它功能,例如加载类信息统计功能、内存池信息统计功能等,那些是以绝对值的形式打印出 来的,比较少用,在此就不做介绍。
为了更全面的监控JVM内存使用情况,我们需要引入更强大的工具来进一步分析–JConsole。敬请关注。
--------
一、概述
SUN
的JDK中的几个工具,非常好用。秉承着有免费,不用商用的原则。以下简单介绍一下这几种工具。(注:本文章下的所有工具都存在JDK5.0以上版本的工
具集里,同javac一样,不须特意安装) 。
我一共找到以下四个工具:重点看看jconsole和jmap。
- jps
- :与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。
- jstat
- :一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
- jmap
- :打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。
- jconsole
- :一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
jps :与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat :一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 jmap :打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 jconsole :一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。
二、 使用介绍:
1、jstat
:我想很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程,及其 id。 jps
也是一样,它的作用是显示当前系统的java进程情况,及其id号。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独
占一个java虚拟机实例),和他们的进程号(为下面几个程序做准备),并可通过opt来查看这些进程的详细启动参数。
使用方法:在当前命令行下打 jps(需要JAVA_HOME,没有的话,到改程序的目录下打) 。
可惜没有linux下的ps好用,名称不好用。但是在第四个工具jconsole的界面里面会有具体JAR包的名称。
2、jstat
:对VM内存使用量进行监控。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介
绍各个参数的意义。
jstat -class pid:显示加载class的数量,及所占空间等信息。
jstat -compiler pid:显示VM实时编译的数量等信息。
jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young
gc的时间,full gc的次数,full gc的时间,gc的总时间。
jstat
-gccapacity:可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使
用量,PGCMX显示的是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推,
OC是old内纯的占用量。
jstat -gcnew pid:new对象的信息。
jstat -gcnewcapacity pid:new对象的信息及其占用量。
jstat -gcold pid:old对象的信息。
jstat -gcoldcapacity pid:old对象的信息及其占用量。
jstat -gcpermcapacity pid: perm对象的信息及其占用量。
jstat -util pid:统计gc信息统计。
jstat -printcompilation pid:当前VM执行的信息。
除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250
6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。
3、jmap
是一个可以输出所有内存中对象的工具,甚至可以将VM
中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用 SHELL jmap -histo
pid>a.log可以将其保存到文本中去(windows下也可以使用),在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。
jmap -dump:format=b,file=f1 3024可以将3024进程的内存heap输出出来到f1文件里。
4、jconsole
是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。由于是GUI程序,这里就不详细介绍了,不会的地方可以
参考SUN的官方文档。
使用方法:命令行里打 jconsole,选则进程就可以了。
友好提示:windows查看进程号,由于任务管理器默认的情况下是不显示进程id号的,所以可以通过如下方法加上。ctrl+alt+del打开任务管
理器,选择‘进程’选项卡,点‘查看’->''选择列''->加上''PID'',就可以了。当然还有其他很好的选项。
三、参考资料:
article:http://elf8848.iteye.com/blog/442806
jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html
jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html
jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
发表评论
-
bash脚本
2012-02-01 15:27 871#!/bin/bash source /etc/profil ... -
sql。导出数据
2011-06-29 16:32 885group by为了统计 LOAD DATA L ... -
java NAN
2011-02-18 16:01 1514今天调试程序时,意外的发现java的浮点数中也有NaN,留 ... -
mysql5 unsigned 相减出现补数 溢出 解决办法
2011-01-11 14:35 18342010-08-17 17:36 在网上查 ... -
HashMap
2010-12-30 21:12 854Iterator<Ent ... -
sed grep
2010-12-30 12:52 901[admin@consign020090 12]$ grep ... -
SQL统计
2010-12-29 14:32 909select cooperate_id,count(*) f ... -
sed grep
2010-12-10 13:16 932tail -fn 1000 20 ... -
JAVA内存模型和多线程
2010-11-29 16:23 1113先了解一下java内存模型 IBM:http://www.i ... -
文件,流
2010-11-11 13:08 903public String getFullFileNa ... -
关于Interger和Long的hashCode
2010-11-03 15:08 2030/** * Returns a hash ... -
java配置文件
2010-10-18 14:22 1049(2010-03-04 20:53:29) 转 ... -
1111
2010-10-18 13:30 0http://blog.chinaunix.net/u2/73 ... -
性能研究
2010-10-15 16:40 1009import java.util.Arrays; im ... -
<![CDATA[...]]>的用法 转载
2010-10-08 16:17 1618关于xml中的<![CDATA[...]]>的 ... -
java beanUtils 转载
2010-09-03 17:53 55411. 概述 c ... -
前端json数据生成
2010-06-08 16:15 1356TB.BBC.MyApplication.in ... -
String内部实现
2010-03-28 01:20 1271import java.applet.Applet; imp ... -
转载 java网络编程 注意点
2010-03-18 15:59 1547一. 网络程序运行过程中的常见异常及处理 ... -
JNI java本地接口
2010-03-01 10:09 975学习了一下JNI,发 ...
相关推荐
资源名称:MySQL管理之道:性能调优、高可用与监控内容简介:《mysql管理之道:性能调优、高可用与监控》由资深mysql专家撰写,以最新的mysql版本为基础,以构建高性能mysql服务器为核心,从故障诊断、表设计、sql...
MySQL管理之道:性能调优、高可用与监控.docx
人民邮电(图灵)-CSS重构:样式表性能调优.201711.epub 人民邮电(图灵)-CSS重构:样式表性能调优
MySQL管理之道 性能调优 高可用与监控 绝对完整PDF版 MySQL作为一款使用极为广泛的开源数据库 被广泛地应用在Internet的中小型网站中 随着MySQL的不断成熟 它也逐渐应用于更多大规模网站中 比如淘宝等 作为MySQL DBA...
大多数 DB2 系统都经过了性能的演变。首先,不论出于硬件还是软件的观点,该系统首先要能被配置。在多数情况下,这将成为系统在实施后如何运行的基础。其次,系统一经发布,勤勉的数据库管理员(DBA)将监控系统的...
JVM系列之性能调优参考手册(实践篇).pdf,资源分享达人
KVM实战:原理、进阶与性能调优 带完整书签 高清PDF文档,虚拟化技术入门经典
内容包括: 第一章:oracle资源管理 第二章:oracle任务调度 ...第十章:性能调优好框架。 由于文件过大,只提供百度网盘下载地址和提取码,请放心下载。 信誉第一,如有任何问题,可以给我发私信或者评论区留言
SQL Server 2000 完结篇 性能调优与维护系列视频教程
KVM实战:原理、进阶与性能调优
MySQL管理之道 性能调优、高可用与监控.part1
NULL 博文链接:https://windchill9.iteye.com/blog/1604732
MySQL管理之道-性能调优、高可用与监控挺 有趣的东东 大家一起看看, 然后我们一起看源代码吧
性能调优--2:性能调优方法 4 性能调优--3:硬件网络层面调优 5 性能调优--4:操作系统层面调优 5 性能调优--5:J2EE容器层面调优 5 性能调优--7:J2EE后台层面调优 10 性能调优--8:J2EE前台层面调优 15 性能调优--...
JVM下篇:性能监控与调优篇
阿里巴巴Java性能调优华山版是一套系统性能调优教程,!通过这份笔记的学习,你将会有一个系统的调优头脑和策略!快了何止100%?需要的朋友可下载试试! 众所周知性能调优可以使系统稳定,用户体验更佳,甚至在...
DB2性能调优 内容提纲 1.The DB2 Optimizer 2.SQL Coding Strategies and Guidelines 3.DB2 Catalog 4.Filter Factors for Predicates 5.Runstats and Reorg Utilities
资源名称:DB2 SQL性能调优秘笈资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
IIS性能调优IIS性能调优 IIS性能调优
KVM实战:原理、进阶与性能调优!!!进阶版,进阶版,进阶版!!!