java jvm 性能监控和故障处理工具

来源:互联网 发布:和玛丽苏开玩笑 知乎 编辑:程序博客网 时间:2024/06/02 02:11

jps(jvm process status tool)

虚拟机进程状况小工具,看看jvm里边有什么 进程 在执行,通常用的是jps -l,输出主类的全名,如果进程执行的是jar包,那么输出jar包的路径


jstat(jvm statistics monitoring tool)

虚拟机统计信息监视工具,用是监视各种运行状态信息,包括类装载、内存、垃圾收集、jit编译等运行数据。常用的-gc可以获得相关信息

8044是进程号,250是250毫秒抓取一次,5是5次。

s0和s1是两个survivor0和survivior1,e是eden 新年代 ,o是old老年代,ygc是young,Fgc就不用说了吧?。这个m和ccs还是没有找到是什么 意思 ,希望有知道的朋友不吝赐教。除此之外每个类型都有两种后缀 一个是c一个是u,c是capacity和used也就是容易和使用量,现在有更好的图形的监控工具,这个知识学一下就好了

jinfo(jvm comfiguration info)

查看jvm的各项参数。

jmap(Memory map for java)

用于生成堆转储快照,一般称为heapdump文件。这个文件是干什么 用的呢,一般是用来做内存分析的。比如有名的分析工具有eclipse memory analyzer,导入heapdump文件即可。


命令格式如上。

jhat(jvm heap analysis tool)


此命令和上面生成的heapdump可以搭配使用,分析工作是一个比较耗费资源的事情,所以说如果要做这个功能的话,最好不要在运行程序的那台机器上做。如果分析成功的话会出一句server is ready,不过因为我的机器内存不够用吧。。。我4g内存呢啊啊啊,,。反正提示生成成功的时候在浏览器中输入localhost:7000就可以看到分析结果,不过我好像 是看不到了。。

jstack(stack trace for java)

java堆栈跟踪工具,用于生成虚拟机当前时刻的线程快照。不过在jdk1.5中就为java.lang.thread类中加了一个方法getAllStackTraces(),用于获取虚拟机中所有线程的stackTraceElement对象。

public void test0() {for (Entry<Thread, StackTraceElement[]> iterable_element : Thread.getAllStackTraces().entrySet()) {Thread thread = (Thread) iterable_element.getKey();StackTraceElement[] stack = (StackTraceElement[]) iterable_element.getValue();if (thread.equals(Thread.currentThread())) {continue;}System.out.println("线程:" + thread.getName() + "\n");for (StackTraceElement stackTraceElement : stack) {System.out.println(stackTraceElement+"\n");}}}
可以用这个方法做一个管理员页面或者java小程序来查看线程堆栈。

结果如下

线程:Attach Listener

线程:Reference Handler

java.lang.Object.wait(Native Method)

java.lang.Object.wait(Unknown Source)

java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)

线程:Signal Dispatcher

线程:Finalizer

java.lang.Object.wait(Native Method)

java.lang.ref.ReferenceQueue.remove(Unknown Source)

java.lang.ref.ReferenceQueue.remove(Unknown Source)

java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)


Jconsole

我刚知道原来 jvm还有这么高大上的东西,



不多介绍了,看界面就明白 了这是一个多么多功能的东西。




0 0
原创粉丝点击