Linux中常用的幾個效能分析命令

2020-08-09 21:01:48

這裏記錄幾個Linux效能分析命令(不含每項參數的說明),方便生產環境出問題快速排查(有時候命令總是忘);

1. ps

ps命令用於檢視進程的執行狀態;

常用方式:

ps -ef | grep java				檢視java服務的詳細資訊;
ps -aux --sort -pcpu | less      根據 CPU 佔用量降序排序;
ps -aux --sort -pcpu,+pmem | head -n 10   按CPU降序,記憶體升序排序,並只展示前10行;   
ps -axjf  或者   pstree   按樹狀展示進程;

2. netstat

用於顯示網路介面的很多統計資訊

netstat -i			顯示網絡卡列表
netstat -an | grep xxx  | wc -l        檢視某個/特定ip的連線數
netstat -an | grep ESTABLISHED |wc -l    檢視建立正常連線數量
netstat -nat |awk '{print$5}'|awk -F : '{print$1}'|sort|uniq -c|sort -rn  檢視每個ip跟伺服器建立的連線數
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20       查詢較多time_wait連netstat -nap | grep pid號                根據進程pid查埠
netstat -nap | grep port號             根據埠port查進程  或者 lsof -i:埠號

3. top

top命令用於監控Linux的系統狀況,比如cpu、記憶體的使用,動態檢視進程變化,監控linux的系統狀況

top 然後輸入M		根據佔用記憶體大小進行排序,降序排序
top 然後輸入P		根據CPU使用百分比大小進行排序
這裏順序記錄一下load average
第一行有load average的資訊:系統負載,即任務佇列的平均長度。三個數值分別爲 1分鐘、5分鐘、15分鐘前到現在的平均值,也可以使用uptime檢視該值;

4. du/df

 df -h              檢視根目錄磁碟使用情況;
 du -sh 目錄         檢視某目錄的佔用大小;

5. free

free -h            檢視記憶體的使用情況;

6. iostat

iostat
device:磁碟名稱
tps:每秒鐘發送到的I/O請求數.
Blk_read/s:每秒讀取的block數.
Blk_wrtn/s:每秒寫入的block數.
Blk_read:讀入的block總數.
Blk_wrtn:寫入的block總數.

7. tcpdump

傳輸的方向:比如src 192.168.1.1說明數據包源地址是192.168.1.1,dst 192.168.1.2指明目的網路地址是192.168.1.2,預設是監控主機對主機的src和dst,即預設監聽本機和目標主機的所有數據。

tcpdump  -i eth0             監聽eth0網絡卡的所有流量
tcpdump -i eth0  host 192.168.1.1       捕獲主機192.168.1.1經過本機網絡卡eth0的所有數據包
tcpdump host 192.168.1.1 and \( 192.168.1.2 or 192.168.1.3 \)   #捕獲主機A(B/C)
tcpdump  -i eth0 src host1           捕獲源主機host1發送的所有的經過eth0網絡卡的所有數據包
tcpdump  -i eth0 dst  host  www.baidu.com      捕獲所有發送到主機www.baidu.com的數據包
tcpdump tcp  port 22  and host 192.168.1.1     捕獲主機192.168.1.1接收和發出的tcp協定的ssh的數據包:
tcpdump  udp port 53       監聽本機udp的53埠的數據包,udp是dns協定的埠
tcpdump -i eth0  -w file.cap host 192.168.1.1 and tcp port 8081    儲存到file.cap,下載到本地通過Wireshark進行分析

8. CPU佔用過高排查過程

1.通過top查出佔用最高進程 top ,按P按CPU排序

在这里插入图片描述

2.佔用過高的應用是java程式通過jps查詢出來
ps -ef|grep 31552
jps -l | grep 31552

3.根據pid查詢出全部執行緒資訊
ps -mp 31552 -o THREAD,tid,time | sort -k 2 -r
-k:按哪列排序;
-r:預設升序,-r降序;

在这里插入图片描述
假如是這條執行緒佔用CPU過高 31552 並將它轉16進位制(小寫)=7b40

jstack 31552 | grep 7b40 -A60
-A60 顯示前60行;

通過上述方式,可以很快的定位到佔用CPU的執行緒及程式碼具體位置,方便排查程式碼問題;