Java程序性能相关

来源:互联网 发布:java手机游戏安卓版 编辑:程序博客网 时间:2024/06/06 00:40

监控

1.操作系统: cpu 内存  swap  磁盘IO  网络IO

2.java进程: cpu  内存  swap 磁盘IO  网络IO

                      基本信息:命令行   系统属性: 默认系统属性  -D   动态增加的系统属性    flags

                      类加载信息

                       线程

                       内存:heap,  永久代(元空间), 堆外内存(nio 申请的一些内存) 

                       gc

=========================================================================

1.基本信息

jcmd xxx VM.uptime 

jcmd xxx VM.version

jcmd xxx VM.command_line  命令行

jcmd xxx VM.system_properties   (jinfo -sysprops  xxx)   系统属性


jcmd xxx VM.flags [-all]  

jinfo  -flags xxx             查看所有flag

jinfo -flag  PrintGCDetails xxx   查看单个falg

jinfo -flag -PrintGCDeatils xxx   修改某个flag


=========================================================================

3.线程

jstack xxx

jcmd  xxx Thread.print


4.内存

4.1 堆(heap)

1. 利用  jmap  -histo  xxxPID      jmap -histo:live xxxPID

例如

mainClassName=xxxxx

jps -l |grep -i ${mainClassName} |awk '{print $1}' |xargs jmap -histo |awk 'NR == 1 {print "num" "\t"  "instance_num" "\t"  "memory" "\t"  "class"}   NR > 3 && NR<20 {print $1 "\t" $2 "\t" $3/1024/1024 "\t" $4}'


2. 利用  jcmd xxxPID   GC.class_histogram


“jcmd xxxPID  GC.class_histogram"命令,不会强制执行full GC, 它只显示活跃对象。

"jmap -histo xxxPID" 也不会强制执行full GC, 但它会显示非活跃对象,所以在使用它之前需要用户自己手动执行full GC。

"jmap -histo:live xxxPID"  同  “jcmd  xxxPID GC.class_histogram"


3 堆转储

jmap -dump:live , file=/path/to/heap_dump.hprof  process_id


jcmd  process_id  GC.heap_dump  /path/to/heap_dump.hprof


生成的堆转储文件,可以用jhat  jvisualVM  mat(EclipseLink Memory Analyzer Tool)

=========================================================================