本文使用java进程来举例
1. 查看java进程及其线程对cpu的占用情况
首先使用ps -ef找到java进程id
# ps -ef|grep java
然后通过top -p pid命令查看该进程占用的cpu情况,例如:
[[email protected] ~]# top -p 23386
top - 11:10:52 up 124 days, 19:18, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16294180k total, 1601480k used, 14692700k free, 262604k buffers
Swap: 8191992k total, 0k used, 8191992k free, 647004k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23386 root 20 0 12.4g 299m 10m S 0.0 1.9 0:56.56 java
此时,若想查看线程占用cpu的情况,手动输入shift+h (Show threads On)进行显示线程的切换。
我们可以直接使用一个参数就默认打开线程占用CPU的跟踪,使用-H参数,例如:
[[email protected] ~]# top -p 23386 -H
top - 11:07:59 up 124 days, 19:15, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 185 total, 0 running, 185 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 16294180k total, 1601224k used, 14692956k free, 262596k buffers
Swap: 8191992k total, 0k used, 8191992k free, 646996k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23386 root 20 0 12.4g 299m 10m S 0.3 1.9 0:00.02 java
23387 root 20 0 12.4g 299m 10m S 0.0 1.9 0:07.63 java
23388 root 20 0 12.4g 299m 10m S 0.0 1.9 0:00.08 java
23389 root 20 0 12.4g 299m 10m S 0.0 1.9 0:00.07 java
23390 root 20 0 12.4g 299m 10m S 0.0 1.9 0:00.08 java
23391 root 20 0 12.4g 299m 10m S 0.0 1.9 0:00.07 java
23392 root 20 0 12.4g 299m 10m S 0.0 1.9 0:00.08 java
23393 root 20 0 12.4g 299m 10m S 0.0 1.9 0:00.08 java
23394 root 20 0 12.4g 299m 10m S 0.0 1.9 0:00.08 java
说明:重点查看%CPU一项,查看哪个线程占用的cpu最多,然后找到对应的pid。
top命令的TIME/TIME+是指的进程所使用的CPU时间,不是进程启动到现在的时间,因此,如果一个进程使用的cpu很少,那即使这个进程已经存在N长时间,TIME/TIME+也是很小的数值。
2. 查看java进程占用内存情况
# cat /proc/23386/status
Name: java
State: S (sleeping)
Tgid: 23386
Pid: 23386
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
Utrace: 0
FDSize: 256
Groups: 0
VmPeak: 13003444 kB
VmSize: 13003444 kB
VmLck: 0 kB
VmHWM: 311496 kB
VmRSS: 307048 kB
VmData: 12846208 kB
VmStk: 88 kB
VmExe: 32 kB
VmLib: 14256 kB
VmPTE: 1704 kB
VmSwap: 0 kB
Threads: 194
说明:
VmRSS: 307048 kB 表示的就是占用的物理内存。
Threads: 194 表示目前一共打开194个线程。