1. jps — Java process state, 针对JVM进程的PS命令
相关参数:
-v
显示启动时给定的JVM参数
-q
jps默认只带着类的短名称,如果指定-q则只显示pid
-l
显示完整类名
-m
显示传递给main主函数的参数,例如:
1 2 3 |
# jps -ml 12812 com.cloudera.cmon.firehose.Main --pipeline-type HOST_MONITORING --mgmt-home /usr/share/cmf 12705 com.cloudera.cmon.firehose.Main --pipeline-type SERVICE_MONITORING --mgmt-home /usr/share/cmf |
2. jinfo — 显示/设置正在运行的JVM进程的扩展参数
jinfo需要指定进程的pid,关于flag参数如下:
-flag
:显示指定的JVM参数值。如果Boolean型值时则显示+,-号
-flag [+|-]
:设置|取消指定参数的blog值
-flag
使用JVM堆内存设置和测试的测试代码,并在中间加上一行中断:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
import java.io.IOException; public class JVMTest { public static void main(String args[]) throws IOException { //=====================Begin========================= System.out.print("Xmx="); System.out.println(Runtime.getRuntime().maxMemory() / 1024.0 / 1024 + "M"); System.out.print("free mem="); System.out.println(Runtime.getRuntime().freeMemory() / 1024.0 / 1024 + "M"); System.out.print("total mem="); System.out.println(Runtime.getRuntime().totalMemory() / 1024.0 / 1024 + "M"); //=====================First Allocated========================= System.out.println("5MB array allocated"); byte[] b1 = new byte[5 * 1024 * 1024]; System.out.print("Xmx="); System.out.println(Runtime.getRuntime().maxMemory() / 1024.0 / 1024 + "M"); System.out.print("free mem="); System.out.println(Runtime.getRuntime().freeMemory() / 1024.0 / 1024 + "M"); System.out.print("total mem="); System.out.println(Runtime.getRuntime().totalMemory() / 1024.0 / 1024 + "M"); int i = System.in.read(); //=====================Second Allocated========================= System.out.println("10MB array allocated"); byte[] b2 = new byte[10 * 1024 * 1024]; System.out.print("Xmx="); System.out.println(Runtime.getRuntime().maxMemory() / 1024.0 / 1024 + "M"); System.out.print("free mem="); System.out.println(Runtime.getRuntime().freeMemory() / 1024.0 / 1024 + "M"); System.out.print("total mem="); System.out.println(Runtime.getRuntime().totalMemory() / 1024.0 / 1024 + "M"); //=====================OOM========================= System.out.println("OOM!!!"); System.gc(); byte[] b3 = new byte[40 * 1024 * 1024]; } } |
运行这个程序:
1 2 3 4 5 |
java JVMTest Xmx=14343.0M #对比,jinfo信息,可以看出是相等的。 jinfo -flag MaxHeapSize 31395 -XX:MaxHeapSize=16919822336 |
添加输出GC日志选项:
1 |
jinfo -flag +PrintGCDetails 31395 |
这时按回车继续程序,可以看出在运行最后打印了GC的信息:
1 2 3 |
Heap PSYoungGen total 301568K, used 59059K [0x00000006afd00000, 0x00000006c4d80000, 0x0000000800000000) ...... |
3. jmap — 生成Java应用程序的堆快照和对象统计信息,生成的dump文件需要用工具来打开进行分析。参数:
-heap
打印Java堆信息
-histo[:live]
打印Java的对象堆的直方图信息。如果指定live,则只统计存货的对象。
-permstat
打印永久代统计信息
-finalizerinfo
打印等待被终结(finalize)的对象信息
4. jstack — 显示线程堆栈信息,常用于程序卡死后的堆栈分析
-l
显示锁信息
-m
显示Java和native的信息
-F
强制dump,当jstack没有响应时使用
5. JConsole — Java SDK自带的图形化工具,非常方便。
启动时会提示选择attach到一个JVM进程上。登录后界面如下,实时窗口包括堆内存、线程、类加载和CPU使用率等四个性能概况,另外还包括一些JVM的统计信息。
线程面板可以诊断线程状态,堆栈(类似jstack),死锁等信息。
6. Visual VM — 相当于jconsole的升级版,将很多命令行工具的功能整合在一起。同样由JDK免费提供。
使用 VisualVM 进行性能分析及调优
美乳ඁ儿童写真meimei666.com
Ӌ嫩模Ӌ宋仲基妹妹爆乳美女丝袜写真中国人体艺术图片美女写真视频卡戴珊全裸沙滩写真天使的诱惑大结局4.mm88.gq
丝袜社区美腿控黑丝袜美女明星美足丝袜美腿论坛性感吊带丝袜www.meitui1.com
丝袜诱惑 520人体艺术亚洲美女人体艺术狼的诱惑歌词腹黑妹妹控兄记10王祖蓝为妹妹买房瑞莎写真非洲人体艺术www.mm520.gq
妩媚图片᜴av女排行温碧霞穿比基尼mm88.ml
送88元大总督希尔顿娱乐城里兹俱乐部澳门财神专员Q:3559782115
车轮也有的,***见
龙珠超太撒比了,都懒得看也懒得吐槽了