CPU高利用率排錯

在我們的雲機系統上,某個計算節點利用率極高,該計算節點起了66個虛擬機


[o***g@compute-13 ~]$ ps -eLf |grep kvm |wc -l
469
8070進程利用率極高

仔細分析8070進程,發現它下面還派生了5個線程

[olinjg@compute-13 ~]$ ps -eLf |grep kvm |grep 8070 |awk '{print $2 "  " $3  "   "$4}'
8070  1   8070
8070  1   8072
8070  1   8073
8070  1   8075
8070  1   8078
8070  1   8087


top –p 8078
PID USER      PR  NI VIRT  RES  SHR S %CPU %MEM    TIME+ COMMAND                                                                
 8078 qemu      20  0 8416m 4.0g 2192 R 180.1 2.8   2187:57 qemu-kvm


[olinjg@compute-13 ~]$ ps -eLf |grep kvm |grep 8070 |awk '{print $2 "  " $3  "   "$4}'
8070  1   8070
8070  1   8072
8070  1   8073
8070  1   8075
8070  1   8078
8070  1   8087


實時追蹤:

先看看這些線程都在幹什麼:


[root@compute-13 olinjg]# strace -p 8072
Process 8072 attached - interrupt to quit
rt_sigtimedwait([BUS USR1], 0x7f33174e7c00, {0, 0}, 8) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
ioctl(15, 0xae80, 0)                    = 0
ioctl(15, 0xae80, 0)                    = 0
ioctl(15, 0xae80, 0)                    = 0
ioctl(11, 0xffffffffc008ae67, 0x7f33174e7a70) = 0
ioctl(11, 0xffffffffc008ae67, 0x7f33174e7aa0) = 0
ioctl(15, 0xae80, 0)                    = 0

[root@compute-13 olinjg]# strace -p 8073
Process 8073 attached - interrupt to quit
rt_sigtimedwait([BUS USR1], 0x7f3316ae6c00, {0, 0}, 8) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigpending([])                       = 0
ioctl(16, 0xae80, 0)                    = 0
ioctl(16, 0xae80, 0)                    = 0
ioctl(16, 0xae80, 0)                    = 0
ioctl(11, 0xffffffffc008ae67, 0x7f3316ae6a70) = 0
ioctl(11, 0xffffffffc008ae67, 0x7f3316ae6aa0) = 0
ioctl(16, 0xae80, 0)                    = 0
ioctl(11, 0xffffffffc008ae67, 0x7f3316ae6aa0) = 0
ioctl(16, 0xae80, 0)                    = 0
ioctl(16, 0xae80, 0)                    = 0
ioctl(16, 0xae80, 0)                    = 0
ioctl(16, 0xae80, 0)                    = 0
ioctl(16, 0xae80, 0)                    = 0

再看看進程8070在幹什麼:


似乎只執行了read write select等幾個簡單的系統調用函數


read(9, 0x7fff02954ad0, 1)              = -1 EIO (Input/output error)

read(3, 0x7fff02955a40, 128)            = -1 EAGAIN (Resource temporarily unavailable)

read(51, 0x7f331c68d53c, 69632)         = -1 EAGAIN (Resource temporarily unavailable)

read(51, 0x7f331c68d53c, 69632)         = -1 EAGAIN (Resource temporarily unavailable)

read(9, 0x7fff02954ad0, 1)              = -1 EIO (Input/output error)

read(51, 0x7f331c68d53c, 69632)         = -1 EAGAIN (Resource temporarily unavailable)

read(9, 0x7fff02954ad0, 1)              = -1 EIO (Input/output error)



找一個正常的計算節點,用strace看看其上的虛機在幹什麼。做個比較
在Read Only計算節點上寫一個while程序,看看利用率是不是也會標高


CPU利用率過高的幾個原因:

如果可用內存過小會導致頻繁讀取交換文件,使得CPU利用率過高



linux系統性能分析,很不錯:

http://www.blogjava.net/qileilove/archive/2013/03/25/396949.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章