- 论坛徽章:
- 0
|
有个多线程的java进程,使用top -Hp jvm_pid 可看到所有的线程的资源使用情况
[mdw@tdy218 ~]$ top -Hp 4813
top - 12:06:10 up 7:13, 1 user, load average: 0.00, 0.01, 0.03
Tasks: 36 total, 0 running, 36 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.1%us, 0.1%sy, 0.1%ni, 97.8%id, 1.8%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 2056564k total, 1944488k used, 112076k free, 125612k buffers
Swap: 4192956k total, 0k used, 4192956k free, 1141140k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4813 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.00 java
4814 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:04.41 java
4815 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.18 java
4816 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.12 java
4817 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.19 java
4818 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.18 java
4819 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:01.26 java
4820 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.02 java
4821 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.06 java
4822 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.00 java
4823 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:03.30 java
4824 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:03.22 java
4825 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.00 java
4826 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.49 java
4829 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.00 java
4831 mdw 15 0 1659m 417m 26m S 0.0 20.8 0:00.06 java
...................
最左侧的PID列,就是4813这个进程号里每个线程的线程号,默认按每个线程CPU的占用率进行排序。
目前想格式化这个输出结果到这种效果:
只显示前10行CPU占用率高的线程,并且将最左侧的PID列的十进制线程号转换为十六进制。
[mdw@tdy218 ~]$ top -Hp 4813 | awk 'BEGIN {printf "THREAD#\tSTATE\t%CPU\tTIME+\n-------------------------------\n"}{if(NR>7 && NR<1 printf ("0x%x \t%s \t%s \t%s\n",$2,$9,$10,$12)}'
THREAD# STATE %CPU TIME+
-------------------------------
0x12cd S 0.0 0:00.00
0x12ce S 0.0 0:04.41
0x12cf S 0.0 0:00.18
0x12d0 S 0.0 0:00.12
0x12d1 S 0.0 0:00.19
0x12d2 S 0.0 0:00.18
0x12d3 S 0.0 0:01.47
0x12d4 S 0.0 0:00.02
0x12d5 S 0.0 0:00.06
0x12d6 S 0.0 0:00.00
结果是输出来了,但又有了一个问题,这个输出的结果不会刷新了,只显示一次,这是为什么?
如果把 if(NR>7 && NR<1 去掉后面的条件,&& NR <18,他就可以循环,但是第2次循环时,输出的结果就出现问题了。
大虾们帮忙分析下,多谢!~ |
|