Java分析工具

[b]1、jps[/b]:类似unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程,及其 id。 jps 也是一样,它的作用是显示当前系统的java进程情况,及其id号。我们可以通过它来查看我们到底启动了几个java进程和他们的进程号(为下面几个程序做准备),并可通过opt来查看这些进程的详细启动参数。
使用方法:在当前命令行下打 jps(需要JAVA_HOME,没有的话,到改程序的目录下打) 。

可惜没有linux下的ps好用,名称不好用。但是在第四个工具jconsole的界面里面会有具体JAR包的名称。

[b]2、jstat[/b]:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。
jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。
jstat -class pid:显示加载class的数量,及所占空间等信息。

# jstat -class 25917

Loaded Bytes Unloaded Bytes Time

2629 2916.8 29 24.6 0.90

jstat -compiler pid:显示VM实时编译的数量等信息。
# jstat -compiler 25917

Compiled Failed Invalid Time FailedType FailedMethod

768 0 0 0.70 0

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每三行显示一下标题。

[b]3、jmap[/b] 是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。使用方法 jmap -histo pid。如果连用 SHELL jmap -histo pid>a.log可以将其保存到文本中去(windows下也可以使用),在一段时间后,使用文本对比工具,可以对比出GC回收了哪些对象。 jmap -dump:format=b,file=f1 3024可以将3024进程的内存heap输出出来到f1文件里。

[b]4、jconsole[/b] 是一个用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。由于是GUI程序,这里就不详细介绍了,不会的地方可以参考SUN的官方文档。
使用方法:命令行里打 jconsole,选则进程就可以了。
提示:windows查看进程号,由于任务管理器默认的情况下是不显示进程id号的,所以可以通过如下方法加上。ctrl+alt+del打开任务管 理器,选择‘进程’选项卡,点‘查看’->''选择列''->加上''PID'',就可以了。当然还有其他很好的选项。

[b]5、ThreadDump[/b]
在Windows中,是在JVM运行的控制台窗口中按下Ctrl-Break。对基于Linux和Unix的系统,则用kill命令将SIGQUIT发送到JVM。这可以通过命令kill – 3 完成,这里的pid是JVM的进程ID
提示:a.最好重定向到一个文件里。
b.为了避免关闭telnet的TERM信号量可以使用nohup

[b]6、JProfilor[/b]
在监测端的Jprofile,其设置没有多大的改变,也是按照向导,选择更多不同的选项而已。
(远程)被监测端的配置:
(1) 将以下启动参数加入到Java应用的 "Java Runtime Parameters" 中
-Xrunjprofiler:port=8849 -Xbootclasspath/a:E:/PROGRA~1/JPROFI~1/bin/agent.jar

简单地说,就是在启动Java应用的命令行里面加上以上参数。
port=8849,这个端口就是Jprofile里面设置监听的远程端口, 其必须要与Jprofile里面的设置保持一致。另外,agent.jar这个文件应该是位于Jprofile安装目录的bin目录下(对应被监测端的路 径)。对于目录过长或者带空格的,要注意转换为8位长度的写法,不然可能会找不到路径(windows系统有此问题)。

(2) 将Jprofile安装路径下的bin\windows 增加到Path环境变量中
E:\Program Files\jprofiler5\bin\windows

注意,这个路径应该是Jprofile安装路径下的bin\windows(不同系统对应不用的目录,unix、linux对应的不一样。bin\unix或bin\linux。没用过这两个版本)

两边配置完成后,就可以启动被监测的Java应用和Jprofile,一会就可以在Jprofile上看到监测数据了。这就是使用Jprofile进行监测的大致步骤,不同的使用模式配置步骤没有区别。


Jprofile的几种监测模式
Jprofile提供3中监测模式,分别是等待模式,非等待模式,离线模式。

等待模式:在等待模式中,被监测的Java应用,需要等待Jprofile连接上,才会继续其启动过程,不然该启动过程会被挂起,处于等待Jprofile连接中。
使用该模式的方法是,在Jprofile配置session时,选择该模式,然后在被监测的Java应用启动参数中,加入:
-Xrunjprofiler:port=8849 -Xbootclasspath/a:E:/PROGRA~1/JPROFI~1/bin/agent.jar

非等待模式:被监测的Java应用不会等待Jprofile的连接而直接启动,Jprofile在需要时再启动。
使用该模式的方法是,在Jprofile配置session时,选择该模式,然后在被监测的Java应用启动参数中,加入:
-Xrunjprofiler:port=8849,nowait,id=116,config=E:/DOCUME~1/ADMINI~1/JPROFI~1/config.xml -Xbootclasspath/a:E:/PROGRA~1/JPROFI~1/bin/agent.jar

离线模式:被监测的Java应用不会等待Jprofile的连接而直接启动,同时监测数据会在服务器端缓存,在Jprofile连接时,将其返回给Jprofile。
使用该模式的方法是,在Jprofile配置session时,选择该模式,然后在被监测的Java应用启动参数中,加入:
-Xrunjprofiler:offline,id=116,config=E:/DOCUME~1/ADMINI~1/JPROFI~1/config.xml -Xbootclasspath/a:E:/PROGRA~1/JPROFI~1/bin/agent.jar

这里要注意的两个地方是:id=116,这个是Jprofile中设定的监测session的id,而config=E:/DOCUME~1/ADMINI~1/JPROFI~1/config.xml则 是包含该session的Jprofile配置文件(如果你的session是在监测端配置的,那么你必须将监测端的这个config文件同步到被监测端 上,否则被监测端将因为找不到你指定的sessionId而提示错误)。上面的启动参数的路径都应该是被监测端的路径。


WAS服务器的远程监测设置
1.配置Jprofile,创建一个监测远程服务器的session。如果使用向导,选择了WebSphere服务器的,可能需要提供该服务器的 server.xml文件和startServer.bat启动脚本文件。这时你去服务器那里,把这个两个文件,放到监测端的机器上,然后填入对应的路径 就好了。当session创建完成后,再将这两个文件复制回被监测端的服务器上。
其实Jprofile需要这两个文件的原因是因为它会自动帮你修 改这两个文件,使WAS server的启动环境符合Jprofile的设置,免了你手动设置的麻烦。如果你使用的WebSphere单服务器版还好,若是网络部署版,手动修改服 务器的config是很危险的。对于这种情况,我的做法是到被监测端的服务器拿这两个文件到监测端,但不将修该后的文件放回被监测端的服务器,而改用手动 配置WAS server。

2.设置WAS服务器的启动参数
在Application servers > server1 > Process Definition > Java Virtual Machine 的 Generic JVM arguments 中加入上面提到的Jprofile模式的参数。

3.设置WAS 所在的机器的Path环境变量
在被监测端的Path环境变量中,加入E:\Program Files\jprofiler5\bin\windows(注意修改为服务器上Jprofile对应的路径)

4.禁用WAS server对应的windows service,如果将WAS server注册为windows的话。(有时不禁用它也可以正常对server进行监测,如果禁用了,就不能再从DM Console上对它进行启动了。)

5.同步监测端和被监测端的Jprofile config.xml文件

6.重启该WAS server.(如果在DM Consol中启动失败。尝试在命令行,使用脚本启动)

7.启动Jprofile,打开设置好的session

8.这时你应该看到监测数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值