天天看點

linux監控工具an,Linux 系統監控工具-top

目的找出系統瓶頸

磁盤(存儲)瓶頸

CPU和記憶體瓶頸

網絡瓶頸

TOP指令

top 運作中可以通過 top 的内部指令對程序的顯示方式進行控制參數含義s改變畫面更新頻率

l關閉或開啟第一部分第一行 top 資訊的表示

t關閉或開啟第一部分第二行 Tasks 和第三行 Cpus 資訊的表示

m關閉或開啟第一部分第四行 Mem 和 第五行 Swap 資訊的表示

N以 PID 的大小的順序排清單示程序清單

P以 CPU 占用率大小的順序排列程序清單

M以記憶體占用率大小的順序排列程序清單

h顯示幫助

n設定在程序清單所顯示程序的數量

q退出 top

linux監控工具an,Linux 系統監控工具-top

統計資訊前五行是系統的統計資訊,第一行是任務隊列資訊,同uptime指令的執行結果

備注:top指令終端下,鍵盤按l可以切換top顯示

第一行Top:01:06:48    表示目前系統時間

up 1:22    表示系統已經運作時間

1 user    表示目前登入使用者的數量

load average 0.06,0.60,0.48    表示相應最近5、10和15分鐘内的平均負載

第二行Tasks:29 total    程序總數

1 running    正在運作的程序數

28 sleeping    睡眠的程序數

0 stopped    停止的程序數

0 zombie    僵屍程序數

第三行Cpu(s):0.3% us    使用者态CPU 時間

1.0% sy   核心态CPU 使用率

0.0% ni    使用者程序空間内改變過優先級的程序占用CPU百分比

98.7% id    代表空閑時間

0.0% wa    代表等待 I/O的CPU時間

0.0% hi    硬體CPU中斷占用百分比

0.0% si    軟中斷占用百分比

0.0% st    虛拟機占用百分比

第四行:191272k total    實體記憶體總量

173656k used    使用的實體記憶體總量

17616k free    空閑記憶體總量

22052k buffers   緩存,主要用于目錄方面,inode值等(ls大目錄可看到這個值增加)

cached 緩存,用于已打開的檔案

第五行:192772k total    交換區總量

0k used    使用的交換區總量

192772k free    空閑交換區總量

123988k cached    緩沖的交換區總量,記憶體中的内容被換出到交換區,而後又被換入到記憶體,但使用過的交換區尚未被覆寫,該數值即為這些内容已存在于記憶體中的交換區的大小,相應的記憶體再次被換出時可不必再對交換區寫入。

主體含義:名額含義PID程序ID,程序的唯一辨別符

USER程序所有者的實際使用者名

PR程序的排程優先級。這個字段的一些值是'rt'。這意味這這些程序運作在實時态

NI程序的nice值(優先級)。越小的值意味着越高的優先級。負值表示高優先級,正值表示低優先級

VIRT程序使用的虛拟記憶體。程序使用的虛拟記憶體總量,機關kb。VIRT=SWAP+RES

RES駐留記憶體大小。駐留記憶體是任務使用的非交換實體記憶體大小。程序使用的、未被換出的實體記憶體大小,機關kb。RES=CODE+DATA

SHRSHR是程序使用的共享記憶體。共享記憶體大小,機關kb

SD - 不可中斷的睡眠态。R – 運作态 S – 睡眠态 T – 被跟蹤或已停止 Z – 僵屍态

%CPU自從上一次更新時到現在任務所使用的CPU時間百分比

%MEM程序使用的可用實體記憶體百分比

TIME+任務啟動後到現在所使用的全部CPU時間,精确到百分之一秒

COMMAND運作程序所使用的指令。程序名稱(指令名/指令行)

怎麼判斷系統是否負載過高?

理想每個核不超過1,是以先檢視自己處理器是幾何cat /proc/cpuinfo|grep "cores"|uniq

負載過高:每分鐘平均負載>=cpu核數*3

如何通過CPU名額排查問題?us和ni高,說明使用者态程序占用了較多的 CPU,是以應該着重排查程序的性能問題。

sy高,說明核心态占用了較多的 CPU,是以應該着重排查核心線程或者系統調用的性能問題。

wa 高,說明等待 I/O 的時間比較長,是以應該着重排查系統存儲是不是出現了 I/O 問題。

hi和si,說明軟中斷或硬中斷的處理程式占用了較多的 CPU,是以應該着重排查核心中的中斷服務程式。

CPU使用率計算公式?CPU使用率=1-空閑時間/總CPU時間

記憶體計算公式?total=used+freeused=buffers+cached

什麼是Cache Memory(緩存記憶體)?

當你讀寫檔案的時候,Linux核心為了提高讀寫性能與速度,會将檔案在記憶體中進行緩存,這部分記憶體就是Cache Memory(緩存記憶體)。即使你的程式運作結束後,Cache Memory也不會自動釋放。這就會導緻你在Linux系統中程式頻繁讀寫檔案後,你會發現可用實體記憶體會很少,沒必要手動釋放。

Cache Memory導緻異常?在Linux中頻繁存取檔案,實體記憶體很快用光,而cached一直在增長。Linux會對每次請求過的資料緩存在cache裡,好處就是CPU的處理速度遠遠高于記憶體,是以在CPU和記憶體通訊的時候可以快速從cache中命中結果傳回。

Swap被占用。記憶體可能不夠了,才會占Swap,是以Swap可以作為伺服器監控的一項名額,引起注意。

如何釋放Cache Memory?

drop_caches的值可以是0-3之間的數字,代表不同的含義:不釋放(系統預設值)

釋放頁緩存

釋放dentries和inodes

釋放所有緩存echo 1 > /proc/sys/vm/drop_caches

Linux OOM-killer 記憶體不足時kill高記憶體程序的政策?

Linux 核心有個機制叫OOM killer(Out Of Memory killer),該機制會監控那些占用記憶體過大,尤其是瞬間占用記憶體很快的程序,然後防止記憶體耗盡而自動把該程序殺掉。核心檢測到系統記憶體不足、挑選并殺掉某個程序的過程可以參考核心源代碼linux/mm/oom_kill.c,當系統記憶體不足的時候,out_of_memory()被觸發,然後調用select_bad_process()選擇一個”bad”程序殺掉。如何判斷和選擇一個”bad程序呢?linux選擇”bad”程序是通過調用oom_badness(),挑選的算法和想法都很簡單很樸實:最bad的那個程序就是那個最占用記憶體的程序。

檢視oom-killer服務日志#

grep "Out of memory" /var/log/messages

# 檢視系統日志方法

egrep -i -r 'killed process' /var/log

#

dmesg

為什麼要禁用swap?

swap,這個當記憶體不足時,linux會自動使用swap,将部分記憶體資料存放到磁盤中,這個這樣會使性能下降,為了性能考慮推薦關掉。# /etc/sysctl.conf

vm.swappiness = 0

檢視記憶體占用top10?ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head

檢視cpu占用top10?ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head

有關記憶體消耗最大程序ps aux --sort -rss | head

檢視程序内部線程占用分析?top -H -P 實際PID

Linux程序及線程限制?# 檢視使用者最大程序數(max user processes)

ulimit -a

# 檢視系統可生成最大線程數

cat /proc/sys/kernel/threads-max

# 檢視單個項目線程數

ps -eLf | grep 項目名 | wc -l

# 檢視程序最大線程數

cat /proc/sys/vm/max_map_count

# 檢視pid上限

cat /proc/sys/kernel/pid_max

# 檢視目前已用的程序或線程數

pstree -p | wc -l

# 檢視linux的線程模型

getconf GNU_LIBPTHREAD_VERSION

修改root使用者最大程序數?echo "* soft nproc 65535" >> /etc/security/limits.conf

echo "* hard nproc 65535" >> /etc/security/limits.conf

僵屍程序的産生、危害、規避方法?

含義:子程序終止後,直到父程序調用wait()前的時間裡,子程序被稱為zombie;

具體原因:子程序結束後向父程序發出SIGCHLD信号,父程序預設忽略了它。

父程序沒有調用wait()或waitpid()函數來等待子程序的結束。

網絡原因有時會引起僵屍程序;

危害:僵屍程序會占用系統資源,如果很多,則會嚴重影響伺服器的性能;

規避方法:

讓僵屍程序成為孤兒程序,由init程序回收;(手動殺死父程序)

調用fork()兩次;

捕捉SIGCHLD信号,并在信号處理函數中調用wait函數;