linux下如何查看多核負載情況【轉】


最近服務器負載超荷,CPU的單個荷使用率到了百分之八九十,內存占用超大,讓給檢測性能,不給源碼,只給一個+ -g編譯生成的執行文件,Fuck!!!

1, 在linux下載了valgrind,使用valgrind 命令分別對內存使用 及 suricata  kill 完后,去初始化結束進程后的內存泄漏中,和源碼相關的泄露大數據塊進行了研究定位;

 2,觀察了 /proc/ 下對應的進程號 的內存使用,各線程棧使用,全局變量和靜態變量的使用 進行了簡要分析;(具體情況參照之前轉載的文章)

3,當然做上部分工作前,分析了top -1 ,及看主進程中各線程中的運行情況;看了各核的使用情況;

linux下如何查看多核負載情況

首先聲明出處:sam的技術blog http://blog.sina.com.cn/samzhen1977

 

1. Linux下,如何看每個CPU的使用率:

#top -d 1

(此時會顯示以1s的頻率刷新系統負載顯示,可以看到總的CPU的負載情況,以及占CPU最高的進程id,進程名字等信息)

 

(切換按下數字1,則可以在顯示多個CPU和總CPU中切換)

之后按下數字1. 則顯示多個CPU   (top后按1也一樣)

Cpu0  :  1.0%us,  3.0%sy,  0.0%ni, 96.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

 

 這里對us,sy,ni,id,wa,hi,si,st進行分別說明:

us 列顯示了用戶模式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化用戶的程序。

sy 列顯示了內核進程所花費的cpu時間的百分比。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
ni  列顯示了用戶進程空間內改變過優先級的進程占用CPU百分比。

id  列顯示了cpu處在空閑狀態的時間百分比。

wa 列顯示了IO等待所占用的CPU時間的百分比。這里wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁盤大量隨機訪問造成的,也可能磁盤或者磁盤訪問控制器的帶寬瓶頸造成的(主要是塊操作)。

hi

si

st

 

2. 在Linux下,如何確認是多核或多CPU:

#cat /proc/cpuinfo

如果有多個類似以下的項目,則為多核或多CPU:

processor       : 0

......

processor       : 1

3. 如何察看某個進程在哪個CPU上運行:

#top -d 1

之后按下f.進入top Current Fields設置頁面:

選中:j: P          = Last used cpu (SMP)

則多了一項:P 顯示此進程使用哪個CPU。

Sam經過試驗發現:同一個進程,在不同時刻,會使用不同CPU Core.這應該是Linux Kernel SMP處理的。

4. 配置Linux Kernel使之支持多Core:

內核配置期間必須啟用 CONFIG_SMP 選項,以使內核感知 SMP。

Processor type and features  ---> Symmetric multi-processing support

察看當前Linux Kernel是否支持(或者使用)SMP

#uname -a

5. Kernel 2.6的SMP負載平衡:

在 SMP 系統中創建任務時,這些任務都被放到一個給定的 CPU 運行隊列中。通常來說,我們無法知道一個任務何時是短期存在的,何時需要長期運行。因此,最初任務到 CPU 的分配可能並不理想。

為了在 CPU 之間維護任務負載的均衡,任務可以重新進行分發:將任務從負載重的 CPU 上移動到負載輕的 CPU 上。Linux 2.6 版本的調度器使用負載均衡(load balancing) 提供了這種功能。每隔 200ms,處理器都會檢查 CPU 的負載是否不均衡;如果不均衡,處理器就會在 CPU 之間進行一次任務均衡操作。

這個過程的一點負面影響是新 CPU 的緩存對於遷移過來的任務來說是冷的(需要將數據讀入緩存中)。

記住 CPU 緩存是一個本地(片上)內存,提供了比系統內存更快的訪問能力。如果一個任務是在某個 CPU 上執行的,與這個任務有關的數據都會被放到這個 CPU 的本地緩存中,這就稱為熱的。如果對於某個任務來說,CPU 的本地緩存中沒有任何數據,那么這個緩存就稱為冷的。

不幸的是,保持 CPU 繁忙會出現 CPU 緩存對於遷移過來的任務為冷的情況。

6. 應用程序如何利用多Core :

開發人員可將可並行的代碼寫入線程,而這些線程會被SMP操作系統安排並發運行。

另外,Sam設想,對於必須順序執行的代碼。可以將其分為多個節點,每個節點為一個thread.並在節點間放置channel.節點間形如流水線。這樣也可以大大增強CPU利用率。

例如:

游戲可以分為3個節點。

1.接受外部信息,聲稱數據 (1ms)

2.利用數據,物理運算(3ms)

3.將物理運算的結果展示出來。(2ms)

如果線性編程,整個流程需要6ms.

但如果將每個節點作為一個thread。但thread間又同步執行。則整個流程只需要3ms.

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/chenggong2dm/archive/2011/01/12/6131052.aspx


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM