linux cpu佔用率分析

2021-07-27 13:15:42 字數 2827 閱讀 3537

pid user      pr  ni  virt  res  shr s 

%cpu

%mem time

+command

14094

root 150

315m

10m7308

s 891

%2.21:

49.01

gateway

top

中可以看到有

107個執行緒,但是下面

9個執行緒占用

cpu很高,下面以執行緒

14086

為主,分析其為何

high cpu

pid user pr ni virt res shr s

%cpu mem time

+command

14086

root 250

922m

914m

538m

r 101

10.021:

35.46

gateway

14087

root 250

922m

914m

538m

r 101

10.010:

50.22

gateway

14081

root 250

922m

914m

538m

s

9910.08:

57.36

gateway

#gstack 14094 > gstack.log

gstack

.log

中查詢執行緒

id14086

,由於函式棧會暴露函式細節,因此只顯示了兩個函式楨,執行緒

id14086

對應執行緒號是

37

thread37(

thread

0x4696ab90

(lwp

14086

)):

#0 0x40000410 in __kernel_vsyscall ()

#1 0x40241f33 in poll () from /lib/i686/nosegneg/libc.so.6

#gcore 14094

該命令生成

core

檔案core

.14094

%

time seconds usecs

/call calls errors syscall

------

-----------

-----------

---------

---------

----------------------------

99.99

22.683879

3385

6702

poll

gcore

和實際的

core

dump

時產生的

core

檔案幾乎一樣,只是不能用

gdb進行某些動態除錯

(

gdb)

gdb gateway core

.14094

(

gdb)

thread

37

[

switching

to thread 37(

thread

0x4696ab90

(lwp

14086

))]#

00x40000410

in__kernel_vsyscall

()

(

gdb)

where

#0 0x40000410 in __kernel_vsyscall ()

#1 0x40241f33 in poll () from /lib/i686/nosegneg/libc.so.6

可以根據詳細的函式棧進行

gdb除錯,列印一些變數值,並結合源**分析為何會

poll

呼叫占用很高的

cpu。

因為**涉及到公司產權,顧不在此做詳細分析,需要明白的是分析的流程和使用的命令。

流程為:程序

id->執行緒

id->執行緒函式呼叫棧->函式耗時和呼叫統計->源**分析

Windows CPU佔用率過高

今天除錯程式,發現 windows7 的cpu 佔用率一直為 25 左右,如下圖所示。四核 25 換成單核那就是 100 的佔用率了!上圖進入 程序 頁面,單擊 cpu 列,將根據 cpu佔用率進行排序。結果發現程序 svchost.exe 的cpu 佔用率為 25 記憶體占用達到了2g!記住svc...

檢視CPU佔用率

檢視系統cpu佔用率 在跑一些程式,例如deep learning的時候,總是希望檢視一下cpu gpu 記憶體的使用率 1.cpu 記憶體 使用top命令 top 有乙個更直觀的監測工具,叫htopsu doap t ge tins tall htop s ud oapt get inst all...

分析CPU佔用率過高的問題

cpu佔用率過高的原因 1 中存在死迴圈 2 演算法過於複雜。對於演算法過於複雜而導致的cpu佔用率過高的問題,分析起來並不容易。下面提供一種方法,不管你對 的邏輯以及業務的需求是否了解,只要掌握了這種方法,都可以將問題定位出來。我們都知道,在linux unix下都有效能統計工具,通過top命令,...