- 浏览: 837359 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (149)
- ubuntu (27)
- spring (3)
- hibernate (6)
- struts (1)
- jquery (11)
- ext (2)
- ajax (1)
- java (24)
- 设计 (4)
- db (10)
- web (10)
- 软件应用技巧 (6)
- others (2)
- 设计模式 (1)
- subversion (5)
- javascript (2)
- jpa (1)
- windows (6)
- jboss (1)
- junit (2)
- WebSphere (2)
- log4j (2)
- 新闻和感想 (0)
- ldap (3)
- tomcat (6)
- excel (1)
- PDF (1)
- xml (1)
- json (2)
- 正则表达式 (3)
最新评论
-
sunshine_love:
谢啦
svn:ignore 的用处 -
亮0000仔:
非常好。。
JAVA中浮点数的存储 -
u011840397:
你好,备份和还原到指定的目录的参数如何加呢?
svn备份和还原 -
zhglhy:
简单明了,学习了,感谢分享!
Jboss数据源密码加密 -
wmengmeng66:
写的很好,顶
spring中配置proxool数据源
一直没有做过jvm监控, 总以为要找些专门的工具才能做jvm监控, 如jprofile之类的工具, 但这类工具都是收费的。
经过查找,发现其实sun的jdk中就带有这类工具,从jdk5开始命令行有了jstat,jps,jstatd,图形监控有了jconsole;而到了jdk6,命令有了jmap, jinfo, jstack,图形有了jvisualvm。经过简单试用,这些命令+图形工具 已经足够强大, 能满足一般的监控要求了,如对各类内存、垃圾回收、线程状态的监控。
命令:
以下转自:http://hqman.iteye.com/blog/167796
jstatd
启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。
实例:jstatd -J-Djava.security.policy=my.policy
my.policy文件需要自己建立,内如如下:
grant codebase "file:$JAVA_HOME/lib/tools.jar" {
permission java.security.AllPermission;
};
这是安全策略文件,因为jdk对jvm做了jaas的安全检测,所以我们必须设置一些策略,使得jstatd被允许作网络操作
jps
列出所有的jvm实例
实例:
jps
列出本机所有的jvm实例
jps 192.168.0.77
列出远程服务器192.168.0.77机器所有的jvm实例,采用rmi协议,默认连接端口为1099
(前提是远程服务器提供jstatd服务)
输出内容如下:
jones@jones:~/data/ebook/java/j2se/jdk_gc$ jps
6286 Jps
6174 Jstat
jconsole
一个图形化界面,可以观察到java进程的gc,class,内存等信息。虽然比较直观,但是个人还是比较倾向于使用jstat命令(在最后一部分会对jstat作详细的介绍)。
jinfo(linux下特有)
观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数
实例:jinfo 2083
其中2083就是java进程id号,可以用jps得到这个id号。
输出内容太多了,不在这里一一列举,大家可以自己尝试这个命令。
jstack(linux下特有)
可以观察到jvm中当前所有线程的运行情况和线程当前状态
jstack 2083
输出内容如下:
jmap(linux下特有,也是很常用的一个命令)
观察运行中的jvm物理内存的占用情况。
参数如下:
-heap:打印jvm heap的情况
-histo:打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。
-histo:live :同上,但是只答应存活对象的情况
-permstat:打印permanent generation heap情况
命令使用:
jmap -heap 2083
可以观察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的内存使用情况
输出内容:
jmap -histo 2083 | jmap -histo:live 2083
可以观察heap中所有对象的情况(heap中所有生存的对象的情况)。包括对象数量和所占空间大小。
输出内容:
写个脚本,可以很快把占用heap最大的对象找出来,对付内存泄漏特别有效。
jstat
最后要重点介绍下这个命令。
这是jdk命令中比较重要,也是相当实用的一个命令,可以观察到classloader,compiler,gc相关信息
具体参数如下:
-class:统计class loader行为信息
-compile:统计编译行为信息
-gc:统计jdk gc时heap信息
-gccapacity:统计不同的generations(不知道怎么翻译好,包括新生区,老年区,permanent区)相应的heap容量情况
-gccause:统计gc的情况,(同-gcutil)和引起gc的事件
-gcnew:统计gc时,新生代的情况
-gcnewcapacity:统计gc时,新生代heap容量
-gcold:统计gc时,老年区的情况
-gcoldcapacity:统计gc时,老年区heap容量
-gcpermcapacity:统计gc时,permanent区heap容量
-gcutil:统计gc时,heap情况
-printcompilation:不知道干什么的,一直没用过。
jstat也提供远程能力,
a)使用 jps 查看远端机器有哪些 JVM 进程在使用当中,命令如下: jps 172.25.1.24 // 远端机器的 IP 地址或名称 屏幕输入如下: 13686 Jstatd 14115 XXXJavaServer 15117 Jserver b)从上面可以看到远端机器的 Jstatd 进程已经启动起来了。我们就可以使用 jstat 对相关进程的具体情况进行查看。 Jstat 命令用法如下: jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]] 解释如下: Option 包括以下选项: -class -compiler -gc -gccapacity -gccause -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -printcompilation Vmid 就是 jps 查看到的进程 id ,如上 Jserver 的进程 id 是 15117 。 Interval 是时间间隔,单位为毫秒, 1000 就是一秒。 Count 就是需要查看的次数。 例子假设我们需要查看 172.25.1.24 机器 vmid 为 15117 的 gc 的情况,可以输入下面的命令: jstat -gc 15117@172.25.1.24 1000 3 然后你能看到四行信息(一行为 title ,剩下的就是你要的信息了),仔细看看就可以发现很多信息的了。 c) jstat还有一个可视化的监控包, 叫做jvmstat ,可以从sun的主页下载到。下载好了后,解压到任意目录。 执行 visualgc <pid> ,其实命令跟jstat很像,也可以监控到远程主机。然后就可以看到可视化的监控窗口。还挺酷的。
一般比较常用的几个参数是:
jstat -class 2083 1000 10 (每隔1秒监控一次,一共做10次)
输出内容含义如下:
Loaded | Number of classes loaded. |
Bytes | Number of Kbytes loaded. |
Unloaded | Number of classes unloaded. |
Bytes | Number of Kbytes unloaded. |
Time | Time spent performing class load and unload operations. |
jstat -gc 2083 2000 20(每隔2秒监控一次,共做10)
输出内容含义如下:
S0C | Current survivor space 0 capacity (KB). |
EC | Current eden space capacity (KB). |
EU | Eden space utilization (KB). |
OC | Current old space capacity (KB). |
OU | Old space utilization (KB). |
PC | Current permanent space capacity (KB). |
PU | Permanent space utilization (KB). |
YGC | Number of young generation GC Events. |
YGCT | Young generation garbage collection time. |
FGC | Number of full GC events. |
FGCT | Full garbage collection time. |
GCT | Total garbage collection time. |
输出内容:
图形:
visualvm
http://www.iteye.com/topic/516447
如果是本地监控,则可以直接在本地的 窗口中看到java应用程序。双击点开即可打开监控窗口。
我们再看一下图1,左边的窗口中,第二个节点—Remote,它可以用来操作远程机器。远程机器需要启动一个daemon:jstatd
1、远程机器启动jstatd
1.1、 首先需要准备一个java.policy文件,保存到如/home/admin/jstatd.java.policy
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; }; |
1.2、 启动jstatd
jstatd -J-Djava.security.policy=/home/admin/jstatd.java.policy -J-Djava.rmi.server.logCalls=true |
1.3、 同时需要执行一个命令看看(linux需要)
Hostname –i 如果显示是127.0.0.1,则需要修改/etc/hosts文件,去掉对本机名的配置,让本机名解析到它的IP地址,如10.20.131.214 |
2、连接远程机器
(图8)
3、点击OK,看到会连接到远程机器,并显示出它下面的java进程。
jconsole
http://www.blogjava.net/beansoft/archive/2006/12/13/87494.html
监控本地应用
首先就是启动您要监控的应用, 例如我用 JDK 1.6 来启动了 Tomcat, 或者 Eclipse 也可以, 可以在任务管理器(Ctrl+Alt+Del可以调出来, 或者在任务栏点击右键)里看到进程ID, 例如我这里是 6132.
接着在 JDK 安装目录中(<JDK_HOME>/bin/jconsole.exe)启动 jconsole.exe (双击或者在 cmd 里面敲入 jconsole), 主界面会提示您建立一个新连接:
可以看到进程ID, 选择它, 然后点击"连接". 这些 ID 必须都是用 JDK 1.6 的 java.exe 启动的, 否则在列表里看不到.
JConsle 能监控内存,线程,类的数目和CPU然后点击各个 Tab 可以看到详细的输出, 详细的输出包括:
内存: 堆/非堆, 峰值, 内存的各个部分, 例如 Perm, Eden 等的大小曲线图.
线程: 峰值, 所有线程的列表, 堆栈跟踪(哪个对象中的线程)等. 还可以强制执行GC.
类: 峰值, 类总数曲线图.
MBean: 一些 JVM 参数的详细 MBean 信息.
监控远程进程
首先需要在运行的应用上启用远程管理, 参数如下(简单期间就不加用户验证了):
java -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -jar ../demo/jfc/Java2D/Java2Demo.jar
然后连接的时候选择远程进程, 地址输入:
localhost:1090
即可.当然在别的电脑上(一般是局域网)可以输入那个电脑的IP.
综述: 使用 JConsole 可以简单的监控 Server 状态, 但是本身要占一定的资源, 不过 JVM 自带的监控, 理论上讲应该是占资源很小很小的, 可以用它来方便的了解 Web 服务器应用进程的状态. 如果要调优应用, 还是使用 JProfiler 等工具更好一些, 当然它们占的资源也更大.
SUN官方说明:
jvisualvm: http://java.sun.com/javase/6/docs/technotes/tools/share/jvisualvm.html
jps:http://java.sun.com/javase/6/docs/technotes/tools/share/jps.html
jstat:http://java.sun.com/javase/6/docs/technotes/tools/share/jstat.html
jmap:http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html
jconsole:http://java.sun.com/javase/6/docs/technotes/tools/share/jconsole.html
发表评论
-
运算符优先级
2010-11-04 14:28 1865最近在研究表达式求值,看了下论坛推荐的JSEL和Aviator ... -
log4j日志文件保存路径的设置
2010-08-12 11:56 6732一直都是把log4j的日志文件位置设定成绝对路径,直到今天发 ... -
jsp页面突然不支持EL的问题
2010-07-12 16:11 2076转自http://www.iteye.com/topic/15 ... -
JAVA从键盘读取输入信息
2010-02-28 17:58 2741import java.io.BufferedReader; ... -
JAVA UUID
2010-02-26 23:24 4445UUID(Universally Unique Identif ... -
JAVA中浮点数的运算
2010-02-24 15:30 1671问题的提出: 如果我们编译运行下面这个程序会看到什么 ... -
JAVA中控制double和float的精度
2010-02-24 15:21 7703本篇介绍了在JAVA中如何对double或者float的浮点数 ... -
JAVA的位移运算
2010-02-24 10:38 1105左移操作: x << nx可以是byte, ... -
各种排序JAVA实现
2009-12-15 17:25 1128package sort; import ... -
JDK自带VM分析工具jps,jstat,jmap,jconsole
2009-08-13 13:13 1712转自:http://jiajun.iteye.com/blog ... -
javabean属性命名难以为人所知的秘密
2009-07-09 10:46 3536原文:http://www.blogjav ... -
java properties文件读取乱码问题解决之道
2009-06-10 11:09 4774Poperties Editor 插件------ ... -
正则表达式参考
2009-05-21 01:40 958http://www.cnblogs.com/netshuai ... -
Apache Commons Logging 是如何决定使用哪个日志实现类的
2009-05-20 11:36 7618原文是:http://www.blogjava.net/Unm ... -
java keytool 常用命令
2009-05-05 17:10 5413最近在做ssl连接active dir ... -
java.sql.Date,java.sql.Time和java.sql.Timestamp
2009-02-07 13:12 9295java.sql.Date,java.sq ... -
理解Unsupported major.minor version 49.0为何错误
2008-09-09 11:33 2665今天一位同事在发布一个portlet到ibm portal时报 ... -
关于Java异常抛出和处理的思考
2008-07-30 17:38 8003看过不少关于java异常处 ... -
反射私有方法
2008-07-30 10:54 1761曾经碰到一件怪事:Spring可以把构造函数为私有的对象实例也 ... -
jdk5 concurrent 初学
2008-07-22 11:50 2413由于上次发现了ReentrantLock,同步的另外一种实现, ...
相关推荐
jstatd是JVM监控服务,它基于RMI(Remote Method Invocation)技术,允许远程机器获取本地JVM应用的信息。默认监听1099端口。在启用jstatd时,可能需要配置安全策略文件(如`jstatd.all.policy`),赋予必要的权限...
3. **本地JVM监控** - **连接本地应用**:在"Local"选项卡中,你可以看到运行在本机上的所有JVM实例,选择目标应用,点击"Open"进行监控。 - **性能监控**:在"Monitors"选项卡中,你可以查看CPU使用率、内存分配...
本文将详细介绍如何在Java中使用JVM监控工具,包括监控工具的选择、基本使用方法、数据分析技巧和实际应用案例。 JVM监控工具是Java开发者的重要伙伴,它们提供了对Java应用程序内部运行机制的洞察。通过本文的详细...
### JVM监控工具使用入门 #### 引言 Java虚拟机(JVM)是运行Java程序的基础环境,其性能直接影响到应用程序的稳定性和响应速度。为了更好地理解和优化JVM的运行状态,开发人员需要掌握一系列的监控工具和技术。...
**JVM监控工具** 1. **JConsole**:这是Java SDK自带的一个图形化监控工具,可以查看JVM的内存使用情况、线程状态、类加载情况等。 2. **VisualVM**:功能更为强大的多合一JVM分析工具,提供CPU和内存分析、线程...
《使用jvisualvm进行JVM监控的深度解析》 在Java开发过程中,了解和优化JVM(Java虚拟机)的性能至关重要。jvisualvm是一款强大的、免费的Java应用程序性能分析工具,它允许开发者深入洞察JVM的行为,进行内存分析...
JVM监控工具对于理解程序性能、定位问题和优化Java应用的效率至关重要。本篇文章将详细探讨如何利用JVM监控工具来提升Java应用的运行效率。 首先,JVM监控工具可以帮助我们实时查看和分析应用程序的运行状态。例如...
### JVM监控工具详解 在Java应用开发与维护过程中,确保应用程序稳定高效地运行至关重要。为此,JVM(Java虚拟机)提供了多种内置工具用于监控、诊断及优化Java应用程序的性能。本文将详细介绍JVM自带的一些核心...
JVM 监控管理及故障诊断工具 在 Java 虚拟机(JVM)中,监控管理及故障诊断是非常重要的,以确保 JVM 的稳定运行和高效执行。本文将介绍三种常用的 JVM 监控管理及故障诊断工具:jps、jstat 和 jstatd。 1. jps - ...
arthas阿里的开源jvm监控工具,可以用于JVM的调优,快速生成JVM的运行图,方便开发,具体可见阿里的git
- **JVisualVM**:集成了多种JVM监控功能,如内存、线程、类加载、CPU使用率等。 - **JConsole**:提供GUI界面来监视JVM的性能和诊断问题。 - **JMX(Java Management Extensions)**:允许创建和注册MBeans来...
JVM监控工具介绍 JVM监控工具是Java开发者和运维人员不可或缺的工具,通过这些工具可以监控和诊断Java应用程序的性能和资源使用情况。本文将介绍五种JVM监控工具:jstack、jconsole、jinfo、jmap和jdb。 jstack ...
Springboot添加jvm监控实现数据可视化 Springboot添加jvm监控实现数据可视化是指使用Springboot框架来实现对jvm的监控,通过可视化的方式来展示监控数据。下面是该技术的详细介绍: 首先,需要添加Spring-boot-...
以下是几种常用的JVM监控工具的详细介绍: 1. **jstack**: `jstack` 是一个用于打印Java线程堆栈跟踪的工具,它可以帮助我们了解应用程序中线程的状态,比如是否发生死锁或者线程阻塞。通过指定进程ID,我们可以...
本压缩包"JVM监控,调优,分析工具(低配版arthas)-spectre.zip"提供了一个轻量级的Arthas版本——Spectre,它可以帮助开发者在资源有限的环境中进行JVM的监控、调优和分析。 Spectre,这个名字源于电影《007》系列...
"JVM监控程序"是开发者用来观察和分析JVM内部状态的重要工具,帮助他们优化性能、定位问题。本文将深入探讨JVM监控的相关知识点。 1. **JVM内存模型** JVM内存分为堆内存(Heap)、栈内存(Stack)、方法区...
为了确保应用程序高效稳定地运行,开发者需要对JVM进行监控,了解其内部状态,如内存使用、线程活动等。本文将探讨如何在Windows环境下通过简单的命令行工具来监控JVM实例的数量,以及如何进行线程测试,特别是在...
"Java内存泄露_JVM监控工具介绍" Java内存泄露是Java开发中常见的一种问题,发生内存泄露可能会导致Java应用程序崩溃或性能下降。在Java中,内存泄露的原因非常多样,例如,静态变量、循环引用、数据库连接池、...
### JVM监控工具详解 在Java开发与运维领域,掌握有效的监控工具对于确保应用程序的稳定运行至关重要。本文将深入探讨六种关键的JVM监控工具——`jstack`, `jconsole`, `jinfo`, `jmap`, `jdb`, `jstat`——它们...