轉載於:http://blog.csdn.net/tianlesoftware/article/details/6198780ios
Linux系能監控主要涉及系統4個方面資源的監控:數據庫
不一樣的應用類型對各個資源的要求不同,因此監控的時候須要根據應用類型來着重對哪幾個資源進行聯合重點監控,這幾個資源也是比較可能成爲系統瓶頸的地方。服務器
監控這些資源的使用情況,通常須要用到如下命令:網絡
工具 | 用途 |
top | 查看進程活動狀態以及一些系統情況 |
vmstat | 查看系統狀態,硬件和系統信息 |
iostat | 查看CPU負載,硬盤情況 |
sar | 綜合工具,查看系統情況 |
mpstat | 查看多處理器情況 |
netstat | 查看網絡情況 |
iptraf | 實時網絡情況檢測 |
tcpdump | 抓取網絡數據包,詳細分析 |
tcptrace | 數據包分析工具 |
netperf | 網絡帶寬工具 |
dstat | 綜合工具,綜合了vmstat, iostat, ifstat, netstat等多個信息 |
1:CPU併發
CPU 的佔用主要取決於什麼樣的資源正在 CPU 上面運行,好比拷貝一個文件一般佔用較少 CPU,由於大部分工做是由 DMA(Direct Memory Access)完成,只是在完成拷貝之後給一箇中斷讓 CPU 知道拷貝已經完成;科學計算一般佔用較多的 CPU,大部分計算工做都須要在 CPU 上完成,內存、硬盤等子系統只作暫時的數據存儲工做。要想監測和理解 CPU 的性能須要知道一些的操做系統的基本知識,好比:中斷、進程調度、進程上下文切換、可運行隊列等。 這裏用個例子來簡單介紹一下這些概念和他們的關係,CPU每時每刻都有工做在作(進程、線程)而且本身有一張工做清單(可運行隊列),由老闆(進程調度)來決定他該幹什麼,他須要和老闆溝通以便獲得老闆的想法並及時調整本身的工做(上下文切換),部分工做作完之後還須要及時向老闆彙報(中斷),因此打工仔(CPU)除了作本身該作的工做之外,還有大量時間和精力花在溝通和彙報上。tcp
CPU 也是一種硬件資源,和任何其餘硬件設備同樣也須要驅動和管理程序才能使用,咱們能夠把內核的進程調度看做是 CPU 的管理程序,用來管理和分配 CPU 資源,合理安排進程搶佔 CPU,並決定哪一個進程該使用 CPU、哪一個進程該等待。操做系統內核裏的進程調度主要用來調度兩類資源:進程(或線程)和中斷,進程調度給不一樣的資源分配了不一樣的優先級,優先級最高的是硬件中斷,其次是內核(系統)進程,最後是用戶進程。每一個 CPU 都維護着一個可運行隊列,用來存放那些可運行的線程。線程要麼在睡眠狀態(blocked 正在等待 IO)要麼在可運行狀態,若是 CPU 當前負載過高而新的請求不斷,就會出現進程調度暫時應付不過來的狀況,這個時候就不得不把線程暫時放到可運行隊列裏。高併發
能夠從如下幾個方面監控CPU的信息:工具
一般咱們指望咱們的系統能到達如下目標:性能
(1)CPU 利用率,若是 CPU 有 100% 利用率,那麼應該到達這樣一個平衡:65%-70% User Time,30%-35% System Time,0%-5% Idle Time;spa
(2)上下文切換,上下文切換應該和 CPU 利用率聯繫起來看,若是能保持上面的 CPU 利用率平衡,大量的上下文切換是能夠接受的;
(3)可運行隊列,每一個可運行隊列不該該有超過1-3個線程(每處理器),好比:雙處理器系統的可運行隊列裏不該該超過6個線程。
vmstat 是個查看系統總體性能的小工具,小巧、即便在很 heavy 的狀況下也運行良好,而且能夠用時間間隔採集獲得連續的性能數據。
$ vmstat 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 2 1 140 2787980 336304 3531996 0 0 0 128 1166 5033 3 3 70 25 0 0 1 140 2788296 336304 3531996 0 0 0 0 1194 5605 3 3 69 25 0 0 1 140 2788436 336304 3531996 0 0 0 0 1249 8036 5 4 67 25 0 0 1 140 2782688 336304 3531996 0 0 0 0 1333 7792 6 6 64 25 0 3 1 140 2779292 336304 3531992 0 0 0 28 1323 7087 4 5 67 25 0 參數介紹: (1). r,可運行隊列的線程數,這些線程都是可運行狀態,只不過 CPU 暫時不可用; (2). b,被 blocked 的進程數,正在等待 IO 請求; (3). in,被處理過的中斷數 (4). cs,系統上正在作上下文切換的數目 (5). us,用戶佔用 CPU 的百分比 (6). sys,內核和中斷佔用 CPU 的百分比 (7). wa,全部可運行的線程被 blocked 之後都在等待 IO,這時候 CPU 空閒的百分比 (8). id,CPU 徹底空閒的百分比