1. 程式人生 > >linux監控平臺搭建-cpu

linux監控平臺搭建-cpu

get strong r+ 數據傳輸 awk 值類型 分享 ctx sar命令

linux監控平臺搭建-cpu

目前服務器的主流CPU是intel或者AMD。到底主頻是什麽。多核、多線程、並發、並行、超頻、一級緩存、二級緩存、三級緩存。i386、x86

cpu:含有算術邏輯、控制、記憶等單元

頻率:就是CPU每秒鐘可以進行的工作次數。3.0GHz 這個CPU在一秒內進行3.0*10(9)

外頻:CPU與外部組件進行數據傳輸、運算是的速度。最好與內存相匹配。

總核數 = 物理CPU個數 X 每顆物理CPU的核數

總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超線程數

查看物理CPU個數:cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

查看每個物理CPU中core的個數(即核數):cat /proc/cpuinfo| grep "cpu cores"| uniq

查看邏輯CPU的個數:cat /proc/cpuinfo| grep "processor"| wc -l

查看CPU信息(型號):cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

查看CPU的主頻:cat /proc/cpuinfo |grep MHz|uniq

1.監控相關的CPU計算方法:通過采集/proc/stat來得到,大家可以參考sar命令的統計輸出來理解。

cpu.idle:CPU或CPUs空閑並且系統沒有未完成的磁盤I / O請求的時間百分比。

cpu.busy:與cpu.idle相對,他的值等於100減去cpu.idle。

cpu.guest:CPU或CPUS用於運行虛擬處理器的時間百分比。

cpu.iowait:CPU或CPUS用於維護硬件中斷所花費的時間百分比。

cpu.irq:CPU或CPUS用於維護硬件中斷所花費的時間百分比。

cpu.softirq:CPU或CPUS用於服務軟件中斷所花費的時間百分比。

cpu.nice:在優先級高的用戶級別執行時CPU占用率的百分比。

cpu.steal:當虛擬機管理程序為另一個虛擬處理器服務時,虛擬CPU或CPUS在非自願等待中花費的時間百分比。

cpu.system:在系統級別(內核)上執行時CPU占用率的百分比。

cpu.user:在用戶級別(應用程序)執行時CPU占用率的百分比。

cpu.cnt:cpu核數。

cpu.switches:cpu上下文切換次數,計數器類型。在stat裏面是這個 ctxt 30516916343

CPU時間=user+system+nice+idle+iowait+irq+softirq

例如:查看cpu核0

%usr %nice %sys %iowait %irq %soft %steal %guest %idle

cpu0 3143580 88 2678777 3863810314 2442 0 5461 0 0

btime:這行展示從系統啟動到現在為止的時間(以Epoch時間開始計算, 1970-01-01 00:00:00 +0000 (UTC)),單位為秒。

processes:(total_forks) 自系統啟動以來所創建的任務的個數目。

procs_running:當前運行隊列的任務的數目。

procs_blocked:當前被阻塞的任務的數目。

softirq:從系統啟動開始累計到當前時刻,軟中斷時間(單位:jiffies)

技術分享圖片

intr:這行給出中斷的信息,第一個為自系統啟動以來,發生的所有的中斷的次數;然後每個數對應一個特定的中斷自系統啟動以來所發生的次數。

2.監控相關的CPU-load計算方法:讀取/proc/loadavg,都是原始值類型的:

load.1min:表示最近1分鐘的平均負載(取決於機器的核數)

load.5min:表示最近5分鐘的平均負(取決於機器的核數)

load.15min:表示最近15分鐘的平均負載(取決於機器的核數)

常用的命令:sar、mpstat、top、iostat、vmstat、w...

mpstat [-P {cpu|ALL}] [internal [count]]

3.獲取進程cmd的方式

ps -e o user,pid,cmd | grep ssh

ps w -p $pid

4.計算進程啟動的時間

ps -p $pid -o lstart

或者腳本

#!/bin/bash

pid=$1

elt=$( ps w -p $pid o pid=,cmd=,etime= | awk ‘{print $NF}‘ )

case $( echo $elt | sed -e ‘s/:/:\n/g‘ | grep ":" -c ) in

"1")

elt=$( echo $elt | sed -e ‘s/:/ minutes ago /‘ )

;;

*)

elt=$( echo $elt | sed -e ‘s/-/ days ago /‘ -e ‘s/:/ hours ago /‘ -e ‘s/:/ minutes ago /‘ )

;;

esac

date -d "$elt seconds ago"

5.查看單個進程的狀態

cat /proc/$pid/stat

參考:

http://blog.51cto.com/asinego/1949715

linux監控平臺搭建-cpu