常用查看Java程序运行情况命令
目录:
1、环境说明:
2、查看java进程总体运行情况:
3、jps查看java进程:
4、jmap查看堆情况:
5、jstat查看程序的资源和性能:
1、环境说明:
(1)Linux内核版本:4.4.7
cat /proc/version
图1.1 截图1
(2)Linux发行版本:CentOS6.8
cat /etc/issue或lsb_release -a
图1.2 截图2
(3)JDK版本:jdk1.7
java -version
图1.3 截图3
(4)磁盘空间查看:约为3.5T
df -h
图1.4 截图4
(5)查看内存情况:
cat /proc/meminfo
图1.5 截图5
参数说明:
A) MemTotal:总内存为62.81GB
B) MemFree:空闲内存为20.29GB
C) Buffers:用来给文件做缓冲的内存为0.59GB
D) Cached:被高速缓冲存储器使用的内存大小为28.12GB
E) SwapCeched:交换空间
F) Active:活跃使用的缓冲或高速缓冲存储器页面文件的大小
G) InActive:不经常使用的缓冲或高速缓冲存储器页面文件的大小
(4)CPU情况:
①查看物理封装中的处理器数量:
cat /proc/cpuinfo | grep 'physical id' | sort|uniq
图1.6 截图6
②查看逻辑处理器列表:
cat /proc/cpuinfo | grep 'processor' | sort|uniq
图1.7 截图7
③查看位于相同物理封装中的CPU处理核心(内核)数量:
cat /proc/cpuinfo | grep 'cpu cores' | sort | uniq
图1.8 截图8
④查看位于相同物理封装中的逻辑处理器的数量:
cat /proc/cpuinfo | grep 'siblings' | sort | uniq
图1.9 截图9
⑤查看CPU处理核心(内核)列表:
图1.10 截图10
综上,该服务器的CPU为1个物理封装的处理器(physical id),该处理器中CPU处理核心(cpu cores)数量为6个,每个CPU处理核心可划分为2个逻辑处理器(processor),因此该物理处理器中共有12个逻辑处理器(processor)。
图1.11 截图11
2、查看java进程总体运行情况:
top | grep java
图2.1 截图12
说明:第一列:PID,进程id31933
第二列:USER,用户qinyi
第三列:PR,优先级为20
第四列:NI,nice值为0,负值表示高优先级,正值表示低优先级
第五列:VIRT,进程使用的虚拟内存总量为12.7Gb=1.5875GB
第六列:RES,进程使用的、未被换出的物理内存大小为79Mb
第七列:SHR,共享内存大小为27Mb
第八列:S,进程状态为睡眠,R为运行,S为睡眠,T为跟踪/停止,Z为僵尸进程
第九列:%CPU,上次更新到现在的CPU时间占用百分比为0.3%
第十列:%MEM,进程使用的物理内存占用百分比为0.1%
第十一列:TIME+,进程使用的CPU时间为0分0秒
第十二列:COMMAND:命令名为Java
附注:TOP统计信息区参数说明:
图2.2 截图13
A)10:27:13:当前时间;
B)up 17 days, 20:06:系统运行了17天20小时6分钟了;
C)20 users:当前登录用户数为20;
D)load average:0.18,0.56,0.70:系统负载,任务队列的平均长度,1分钟内的平均值为0.18,5分钟内的平均值为0.56,15分钟内的平均值为0.70(数字越小越好);
E)Tasks:407 total, 1 running, 406 sleeping, 0 stopped, 0 zombie:共有407个进程,其中正在运行的进程为1个,睡眠的进程为406个,0个停止,0个僵尸进程;
F)Cpus:0.7%us, 1.2%sy, 0.0%ni, 98.0%id,0.2%wa, 0.0%hi, 0.0%si, 0.0%st:
CPU情况:用户空间占用CPU百分比为0.7%,
内核空间占用CPU百分比为1.2%,
用户进程空间内改变过优先级的进程占用CPU百分比为0.0%,
空闲CPU百分比为98.0%,
等待输入输出的CPU百分比为0.2%,
硬件中断占用CPU百分比为0.0%,
软中断占用CPU百分比为0.0%,
虚拟机占用CPU百分比为0.0%;
G)Mem:65860128k total, 43885228k used, 21974900k free, 619152k buffers:
物理内存共有62.81GB,已使用的物理内存为41.85GB,还有空闲物理内存20.96GB,用来给文件做缓冲的内存为0.59GB;
H)Swap:0k total, 0k used, 0k free, 29484168k cached:
交换区内存大小:0,被高速缓冲存储器使用的内存大小为:28.12GB
3、jps查看java进程:
(1)查看传递给JVM相关参数:
jps -v
图3.1 截图14
①-Djava.aet.headless=true:Headless模式缺少了显示设备、键盘和鼠标,程序激活了headless模式表示程序不能依靠硬件来帮忙,要依靠系统的计算能力模拟出这些特性来;
②-Xmx10000m:设置应用程序的最大内存(堆)大小为10000MB;
③-XX:MaxHeapFreeRatio=70:设置堆内存的最大空闲比例,默认为70,当堆内存的空闲内存大于这个数值时,便会压缩堆空间,得到一个较小的堆;
④-XX:MaxPermSize=256m:JVM允许分配的最大非堆内存为256MB;
⑤-XX:PermSize=128m:JVM初始分配的非堆内存为128MB;
⑥-Xms:8m:JVM初始分配的堆内存为8MB;
(2)输出应用程序的Main函数所在的类的完整路径或者应用程序jar包的完整路径
jps -l
图3.2 截图15
4、jmap查看堆情况:
(1)jmap pid
图4.1 截图16
打印的列分别为:共享对象的起始地址、映射大小、共享对象的绝对路径
(2)jmap -heap pid
图4.2 截图17
A)Heap Configuration:堆内存初始化配置;
B)MinHeapFreeRatio=0:堆内存最小空闲比率0%;
C)MaxHeapFreeRatio=70:堆内存最大空闲比率为70%,当堆内存的空闲内存大于这个数值时,便会压缩堆空间,得到一个较小的堆;
D)MaxHeapSize=10000.0MB:堆内存最大为10000MB;
E)NewSize=1.25MB:堆新生代大小为1.25MB;
F)MaxNewSize=17592186044415 MB:堆新生代最大大小为1677215MB;
G)OldSize=5.1875MB:老年代大小为5.1875MB;
H)NewRatio=2:新生代和老年代的大小比率为2;
I)SurvivorRatio=8:新生代中Eden区和Survivor区的大小比率为8;
J)PermSize=128.0MB:永久代的初始大小为128.0MB;
K)MaxPermSize=256.0MB:永久代最大为1256.0MB;
L)G1HeapRegionSize=0:G1平分java堆而产生区域的大小,此处为0,说明未划分;
M)Young Generation:新生代;
N)Eden Space:Eden区的内存分布;
O)From Space:其中一个Survivor区的内存分布;
P)To Space:另一个Survivor区的内存分布;
Q)Old Generation:老年代
R)Perm Generation:永久代
(3)jmap -histo:live 26559:查看对重存货对象数量和大小
图4.3 截图18
打印列为别为:序列号、Class实例的数量、内存的占用、类限定名;
5、jstat查看程序的资源和性能:
(1)jstat -gc pid 时间间隔 打印次数
图5.1 截图19
A)S0C:年轻代第一个survivor的容量(字节)
B)S1C:年轻代第二个survivor的容量(字节)
C)S0U:年轻代第一个survivor已使用的容量(字节)
D)S1U:年轻代第二个survivor已使用的容量(字节)
E)EC:年轻代中Eden的空间(字节)
F)EU:年代代中Eden已使用的空间(字节)
G)OC:老年代的容量(字节)
H)OU:老年代中已使用的空间(字节)
I)PC:永久代的容量
J)PU:永久代已使用的容量
K)YGC:从应用程序启动到采样时年轻代中GC的次数
L)YGCT:从应用程序启动到采样时新生代中GC所使用的时间(单位:S)
M)FGC:从应用程序启动到采样时老年代中GC(FULL GC)的次数
N)FGCT:从应用程序启动到采样时老年代中GC所使用的时间(单位:S)
O)GCT:从应用程序启动到采样时用于垃圾回收的总时间(单位:S)等于YGCT + FGCT
(2)jstat -gcutil 26559 5000 20
图5.2 截图20
A)S0:新生代中第一个survivor已使用的占当前容量百分比
B)S1:新生代中第二个survivor已使用的占当前容量百分比
C)E:新生代中Eden已使用的占当前容量百分比
D)O:老年代中已使用的占当前容量百分比
E)P:永久代中已使用的占当前容量百分比