Linux 跟踪进程对CPU的占用情况,对内存的占用情况
2019獨角獸企業重金招聘Python工程師標準>>>
本文使用java進程來舉例
1. 查看java進程及其線程對cpu的占用情況
首先使用ps -ef找到java進程id
# ps -ef|grep java
然后通過top -p pid命令查看該進程占用的cpu情況,例如:
# top -p 29008
top - 17:17:29 up 6 days, 23:41,? 5 users,? load average: 0.99, 0.80, 0.66
Tasks:?? 1 total,?? 0 running,?? 1 sleeping,?? 0 stopped,?? 0 zombie
Cpu(s): 25.5%us,? 0.0%sy,? 0.0%ni, 74.5%id,? 0.0%wa,? 0.0%hi,? 0.0%si,? 0.0%st
Mem:?? 7857876k total,? 3429332k used,? 4428544k free,?? 229888k buffers
Swap:? 9895928k total,??????? 0k used,? 9895928k free,? 1512232k cached
? PID USER????? PR? NI? VIRT? RES? SHR S %CPU %MEM??? TIME+? COMMAND???????????????????????????????????????????? ?
29008 root????? 20?? 0 2427m 773m 9.9m S 102.0 10.1?? 5:56.72 java???
此時,若想查看線程占用cpu的情況,手動輸入shift+h (Show threads On)進行顯示線程的切換。
我們可以直接使用一個參數就默認打開線程占用CPU的跟蹤,使用-H參數,例如:
[root@supervision1 ~]# top -p 29008 -H
top - 17:13:40 up 6 days, 23:37,? 5 users,? load average: 0.79, 0.58, 0.57
Tasks:? 78 total,?? 1 running,? 77 sleeping,?? 0 stopped,?? 0 zombie
Cpu(s): 25.6%us,? 0.0%sy,? 0.0%ni, 74.4%id,? 0.0%wa,? 0.0%hi,? 0.0%si,? 0.0%st
Mem:?? 7857876k total,? 3421196k used,? 4436680k free,?? 229888k buffers
Swap:? 9895928k total,??????? 0k used,? 9895928k free,? 1512200k cached
? PID USER????? PR? NI? VIRT? RES? SHR S %CPU %MEM??? TIME+? COMMAND???????????????????????????????????????????? ?
29014 root????? 25?? 0 2430m 771m? 13m R 99.6 10.1?? 1:27.41 java??????????????????????????????????????????????? ?
29013 root????? 16?? 0 2430m 771m? 13m S? 1.0 10.1?? 0:00.73 java??????????????????????????????????????????????? ?
29010 root????? 16?? 0 2430m 771m? 13m S? 0.7 10.1?? 0:00.73 java??????????????????????????????????????????????? ?
29011 root????? 16?? 0 2430m 771m? 13m S? 0.7 10.1?? 0:00.71 java??????????????????????????????????????????????? ?
29012 root????? 16?? 0 2430m 771m? 13m S? 0.7 10.1?? 0:00.70 java????????
說明:重點查看%CPU一項,查看哪個線程占用的cpu最多,然后找到對應的pid。
top命令的TIME/TIME+是指的進程所使用的CPU時間,不是進程啟動到現在的時間,因此,如果一個進程使用的cpu很少,那即使這個進程已經存在N長時間,TIME/TIME+也是很小的數值。
跟蹤這個線程所有系統調用
# strace -p 29014
Process 29014 attached - interrupt to quit
mprotect(0x2aaaaad03000, 4096, PROT_READ) = 0
futex(0x46555274, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x46555270, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x4821a4b4, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x4821a4b0, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
futex(0x2aaab421d528, FUTEX_WAKE_PRIVATE, 1) = 1
clock_gettime(CLOCK_REALTIME, {1432286153, 770906000}) = 0
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個線程。
轉載于:https://my.oschina.net/lionel45/blog/414767
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Linux 跟踪进程对CPU的占用情况,对内存的占用情况的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 目标跟踪_MeanShift
- 下一篇: 用c#开发微信 系列汇总