日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 使cpu使用率升高_关于linux系统CPU篇---gt;CPU使用率升高

發(fā)布時間:2023/12/10 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 使cpu使用率升高_关于linux系统CPU篇---gt;CPU使用率升高 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.CPU使用率為單位時間內(nèi)CPU使用情況的統(tǒng)計,以百分比的方式展示。

LINUX作為一個多任務(wù)操作系統(tǒng),將每個CPU的時間劃分為很短的時間片,再通過調(diào)度器輪流分配給各個任務(wù)使用,因此造成多任務(wù)同時運(yùn)行的錯覺

2.如何查看CPU使用率?

TOP和PS是最常用的性能分析工具。TOP顯示了系統(tǒng)總體的CPU和內(nèi)存使用情況,以及各個進(jìn)程的資源使用情況

PS則只顯示了每個進(jìn)程的資源使用情況

pidstat是專門分析每個進(jìn)程的CPU使用情況的工具

TOP輸出:

# 默認(rèn)每 3 秒刷新一次

$ top

top - 11:58:59 up 9 days, 22:47, 1 user, load average: 0.03, 0.02, 0.00

Tasks: 123 total, 1 running, 72 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 8169348 total, 5606884 free, 334640 used, 2227824 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 7497908 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1 root 20 0 78088 9288 6696 S 0.0 0.1 0:16.83 systemd

2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd

4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H

TOP默認(rèn)顯示的是所有CPU的平均值,這時候按下1,就可以切換到每個CPU的使用率了

下面的pidstat命令,就間隔1秒,展示了進(jìn)程的5組CPU使用率,包括:

%usr用戶態(tài)CPU使用率

%system 系統(tǒng)CPU使用率

%guest 運(yùn)行虛擬機(jī)CPU使用率

%wait 等待IO CPU使用率

%cpu 總的CPU使用率

最后的average部分,還計算了5組數(shù)據(jù)的平均值

pidstat輸出:

# 每隔 1 秒輸出一組數(shù)據(jù),共輸出 5 組

$ pidstat 1 5

15:56:02 UID PID %usr %system %guest %wait %CPU CPU Command

15:56:03 0 15006 0.00 0.99 0.00 0.00 0.99 1 dockerd

...

Average: UID PID %usr %system %guest %wait %CPU CPU Command

Average: 0 15006 0.00 0.99 0.00 0.00 0.99 - dockerd

3.CPU使用率過高怎么辦?

使用top,ps,pidstat等工具,能夠輕松找到占用CPU使用率較高(100%)的進(jìn)程,接下來,你可能想知道占用CPU的是哪個函數(shù)呢,找到它,才能更有效,更針對性的進(jìn)行性能優(yōu)化。

那么那種工具最適合在第一時間分析進(jìn)程的CPU問題呢,推薦的是perf。perf是linux2.6.31以后內(nèi)置的性能分析工具,包含了perf top ,perf record,perf report

第一種:perf top,類似于top,它能夠?qū)崟r顯示占用CPU時鐘最多的函數(shù)或者指令,因此可以用來查找熱點函數(shù),使用界面如下:

$ perf top

Samples: 833 of event 'cpu-clock', Event count (approx.): 97742399

Overhead Shared Object Symbol

7.28% perf [.] 0x00000000001f78a4

4.72% [kernel] [k] vsnprintf

4.32% [kernel] [k] module_get_kallsym

3.65% [kernel] [k] _raw_spin_unlock_irqrestore

...

輸出結(jié)果中,第一行包含三個數(shù)據(jù),分別是采樣數(shù),事件類型和事件總數(shù)量,輸出中可以看到perf采集了833個CPU時鐘事件,而總事件數(shù)則為97742399

如果輸出結(jié)果中,采樣數(shù)(Samples)只有10幾個,那下面的排序和百分比就沒什么實際參考價值

Overhead:該符號的性能事件,在所有采樣中的比例,用百分比來展示

Shared:該函數(shù)或指令所在的動態(tài)共享對象(Dynamic Shared Object),如內(nèi)核,進(jìn)程名,動態(tài)連接庫名,內(nèi)核模塊名等

Object:動態(tài)共享對象的類型。比如[.]表示用戶空間的可執(zhí)行程序,或者動態(tài)鏈接庫,而[k]則表示內(nèi)核空間

Symbol:是符號名,也就是函數(shù)名。當(dāng)函數(shù)名未知時,用十六進(jìn)制地址表示

從上面的輸出中可以看到,占用CPU最多的是perf工具自身,不過它的比例也只有7.28%,說明系統(tǒng)并沒有CPU性能問題。

第二種常見用法:也就是perf record和perf report

perf record 提供了保存數(shù)據(jù)的功能,保存后的數(shù)據(jù),可以用perf report 解析展示

4.案例分析:

(1).使用兩臺linux虛擬機(jī),其中一臺用作web服務(wù)器,模擬性能問題。需要安裝docker,nginx,perf,sysstat等工具

另外一臺用作客戶端,需要安裝ab,curl

(2).在第一臺虛擬機(jī)中執(zhí)行下面命令運(yùn)行nginx和php應(yīng)用:

docker run --name nginx -p 10000:80 -itd feisky/nginx

docker run --name phpfpm -itd --network container:nginx feisky/php-fpm

(3).在第二臺虛擬機(jī)(客戶端)執(zhí)行curl 命令,確認(rèn)nginx已經(jīng)正常啟動:

# 192.168.0.10 是第一臺虛擬機(jī)的 IP 地址

$ curl http://192.168.0.10:10000/

It works!

(4).測試nginx服務(wù)的性能:

# 并發(fā) 10 個請求測試 Nginx 性能,總共測試 100 個請求

$ ab -c 10 -n 100 http://192.168.0.10:10000/

This is ApacheBench, Version 2.3

Copyright 1996 Adam Twiss, Zeus Technology Ltd,

...

Requests per second: 11.63 [#/sec] (mean)

Time per request: 859.942 [ms] (mean)

...

從ab的結(jié)果輸出中,發(fā)現(xiàn)nginx能承受的每秒平均請求數(shù)只有11.63.性能比較差

(5)繼續(xù)執(zhí)行ab,將請求數(shù)增加到10000,這樣在第一個終端使用性能分析工具時,nginx壓力還是繼續(xù)

ab -c 10 -n 10000 http://192.168.0.10:10000/

(6).回到第一個終端運(yùn)行top命令,并按下數(shù)字1,切換到每個CPU的使用率:

$ top

...

%Cpu0 : 98.7 us, 1.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

%Cpu1 : 99.3 us, 0.7 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

...

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

21514 daemon 20 0 336696 16384 8712 R 41.9 0.2 0:06.00 php-fpm

21513 daemon 20 0 336696 13244 5572 R 40.2 0.2 0:06.08 php-fpm

21515 daemon 20 0 336696 16384 8712 R 40.2 0.2 0:05.67 php-fpm

21512 daemon 20 0 336696 13244 5572 R 39.9 0.2 0:05.87 php-fpm

21516 daemon 20 0 336696 16384 8712 R 35.9 0.2 0:05.61 php-fpm

發(fā)現(xiàn)占用CPU最多的是PHP-fpm進(jìn)程

(7).怎么知道是php-fpm的那個函數(shù)導(dǎo)致了CPU使用率升高呢,我們來用perf分析一下。在第一個終端運(yùn)行下面的perf命令

# -g 開啟調(diào)用關(guān)系分析,-p 指定 php-fpm 的進(jìn)程號 21515

$ perf top -g -p 21515

(8).按方向鍵切換到php-fpm,再按下會車鍵展開php-fpm的調(diào)用關(guān)下,發(fā)現(xiàn)調(diào)用關(guān)系最終到了sqrt和add_function

(9).拷貝出nginx應(yīng)用的源碼,看看是不是調(diào)用了這兩個函數(shù):

# 從容器 phpfpm 中將 PHP 源碼拷貝出來

$ docker cp phpfpm:/app .

# 使用 grep 查找函數(shù)調(diào)用

$ grep sqrt -r app/ # 找到了 sqrt 調(diào)用

app/index.php: $x += sqrt($x);

$ grep add_function -r app/ # 沒找到 add_function 調(diào)用,這其實是 PHP 內(nèi)置函數(shù)

原來只有sqrt函數(shù)在ap/idex.php文件中調(diào)用了。看看這個文件的源碼:

$ cat app/index.php

// test only.

$x = 0.0001;

for ($i = 0; $i <= 1000000; $i++) {

$x += sqrt($x);

}

echo "It works!"

發(fā)現(xiàn)原來是測試代碼沒刪就直接發(fā)布應(yīng)用了。

(10).優(yōu)化:

# 停止原來的應(yīng)用

$ docker rm -f nginx phpfpm

# 運(yùn)行優(yōu)化后的應(yīng)用

$ docker run --name nginx -p 10000:80 -itd feisky/nginx:cpu-fix

$ docker run --name phpfpm -itd --network container:nginx feisky/php-fpm:cpu-fix

(11).重新在第二臺虛擬機(jī)中測試nginx性能:

$ ab -c 10 -n 10000 http://10.240.0.5:10000/

...

Complete requests:? ? ? 10000

Failed requests:? ? ? ? 0

Total transferred:? ? ? 1720000 bytes

HTML transferred:? ? ? ?90000 bytes

Requests per second:? ? 2237.04 [#/sec] (mean)

Time per request:? ? ? ?4.470 [ms] (mean)

Time per request:? ? ? ?0.447 [ms] (mean, across all concurrent requests)

Transfer rate:? ? ? ? ? 375.75 [Kbytes/sec] received

...

從這里可以發(fā)現(xiàn),現(xiàn)在每秒的請求數(shù),已經(jīng)從原來的11變成了2237

總結(jié):

CPU使用率是最直觀和最常用的系統(tǒng)性能指標(biāo),更是我們在排查系統(tǒng)性能問題時。通常會關(guān)注的第一個指標(biāo)。所以我們要熟悉它的含義,尤其要弄清楚用戶(user%)、NIce(%nice)、系統(tǒng)(%system),等待IO(%iowait),中斷(%irq),軟中斷(%softirq)

這幾種不同的CPU使用率。

(1).用戶和Nice CPU高,說明用戶進(jìn)程占用了較多的CPU,所以應(yīng)該著重排查進(jìn)程的性能問題

(2).系統(tǒng)CPU高,說明內(nèi)核態(tài)占用了較多的CPU,所以應(yīng)該著重排查內(nèi)核線程或系統(tǒng)調(diào)用的性能問題

(3).IO等待CPU高,說明等待IO的時間比較長,應(yīng)該著重排查系統(tǒng)存儲是不是出現(xiàn)了IO問題

(4).軟中斷和硬中斷高,說明軟中斷或硬中斷處理程序占用了較多的CPU,所以應(yīng)該著重排查內(nèi)核中的中斷服務(wù)程序

碰到CPU使用率升高的問題,可以借助TOP,pidstat等工具,確認(rèn)引發(fā)CPU性能問題的來源,再使用perf等工具,排查出引起性能問題的具體函數(shù)

標(biāo)簽:php,perf,0.0,nginx,linux,使用率,CPU

來源: https://www.cnblogs.com/maxwellsky/p/10658523.html

總結(jié)

以上是生活随笔為你收集整理的linux 使cpu使用率升高_关于linux系统CPU篇---gt;CPU使用率升高的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。