系統性能優化-持續更新

CPU

概念

分析CPU時,主要分析CPU的調度以及性能。線程本身有很多種狀態:

狀態 備註 描述
R running
S sleeping
D Disk sleep
Z zombie
I idle

但線程針對於CPU只有兩種狀態:

  • on-CPU:執行佔用CPU中,並且分爲用戶態時間user和系統態時間sys;
  • off-CPU:等待CPU,或者等待I/O,鎖,換頁等,具體狀態包括可執行,匿名換頁,睡眠,鎖,空閒等狀態。

相關概念

核數
硬件線程
時鐘頻率
CPI/IPC
用戶態時間/系統態時間
運行隊列

分析工具

工具 描述
top 監控每個進程的cpu用量
uptime 平均負載
vmstat 包括系統範圍的cpu平均負載
mpstat 查看所有cpu的核信息
sar -u 查看cpu信息
pidstat 查看進程cpu用量分解
perf cpu剖析

使用方式

//查看系統cpu使用情況
// 1鍵查看所有核的使用率; P按照cpu佔用率進行排序;c顯示完整的命令
top
//查看所有cpu核信息
mpstat -P ALL 1

//查看cpu使用情況以及平均負載
vmstat 1

//進程cpu的統計信息
pidstat -u 1 -p pid

//跟蹤進程內部函數級cpu使用情況

內存

相關概念

  • 物理內存
  • 虛擬內存
  • 常駐內存
  • 虛擬地址空間
  • 頁緩存
  • 缺頁
  • 換頁
  • 用戶態內存分配器:libc,glibc,libmalloc,mtmalloc
  • 內核態內存分配器:slub分配器。

分析工具

工具 描述
free 查看系統整體內存情況
vmstat 虛擬內存統計信息
top 查看每個進程內存佔用
pidstat 查看活動進程的內存佔用
pmap 查看進程的內存映像
sar -r 查看內存情況
dtrace 動態跟蹤
valgrind 內存檢查工具

使用方式

// M按照內存使用排序
top 
//1s採集週期,獲取內存的統計信息
pidstat -p pid -r 1

//查看進程的內存映像信息
pmap -d pid

//檢測程序內存問題
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt  ./程序名

IO

磁盤是系統中最慢的子系統。

相關概念

  • 文件系統
  • VFS
  • 文件系統緩存
  • 頁緩存page cache
  • 緩存區高速緩存buffer cache
  • 目錄緩存
  • inode
  • inode緩存
  • noop調用策略

工具

工具 描述
iostat 磁盤詳細統計信息
iotop 按進程查看磁盤IO的使用情況
pidstat 按進程查看磁盤IO的使用情況
perf 跟蹤工具

使用方式

//查看系統io信息
iotop

//統計io詳細信息
iostat -d -x -k 1 10

//查看進程級io的信息
pidstat -d 1 -p  pid

//查看系統IO的請求,比如可以在發現系統IO異常時,可以使用該命令進行調查,就能指定到底是什麼原因導致的IO異常
perf record -e block:block_rq_issue -ag
perf report

網絡

工具

工具 描述
ping
traceroute 跟蹤源主機和目標機直接的路由信息
netstat 查看進程和端口之間的統計數據,以及TCP/UDP等協議包的統計信息
ss 查看socket統計信息
tcpdump
tcpflow tcp統計流
sar -n DEV 網卡流量情況
sar -n SOCK 查詢網絡以及TCP/UDP狀態信息

使用方式

//顯示網絡統計信息
netstat -s

//顯示當前UDP連接狀況
netstat -nu

//顯示UDP端口號的使用情況
netstat -apu

//統計機器中網絡連接各個狀態個數
netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

//顯示TCP連接
ss -t -a

//顯示sockets摘要信息
ss -s

//顯示所有udp sockets
ss -u -a

//tcp,etcp狀態
sar -n TCP,ETCP 1

//查看網絡IO
sar -n DEV 1

//抓包以包爲單位進行輸出
tcpdump -i eth1 host 192.168.1.1 and port 80 

//抓包以流爲單位顯示數據內容
tcpflow -cp host 192.168.1.1

系統負載

概念

系統負載可以簡單理解爲運行隊列的長度

工具

工具 描述
top
uptime
strace 跟蹤系統調用以及每個系統調用的執行時間
dmesg 查看系統日誌

使用

//查看負載情況
uptime

top

vmstat

//統計系統調用耗時情況
strace -c -p pid

//跟蹤指定的系統操作例如epoll_wait
strace -T -e epoll_wait -p pid

//查看內核日誌信息
dmesg

具體

  1. 查看當前系統整體負載:這時候最好不要直接上top,有可能會影響整體系統的情況。
    uptime :查看系統1/5/15分鐘內的系統運行情況
  2. CPU:
    vmstat:查看等待執行的任務數和當前系統core的數量關係
    mpstat: -P ALL 1 :查看CPU在各個層面的佔用率
    pidstat:查看每個進程佔用CPU的具體情況
    taskset:查看每個進程的親和性
  3. 內存
    /proc/meminfo:查看系統內存的總體情況
    free:同上
  4. 磁盤IO
    iostat:-xz 1 : 查看所有磁盤的讀寫帶寬/讀寫請求數/設備使用率
r/s,w/s,rkB/s,wkB/s 分別表示每秒設備讀次數,寫次數,讀的KB數,寫的KB數。它們描述了磁盤的工作負載。也許性能問題就是由過高的負載所造成的
await I/O平均時間,以毫秒作單位。它是應用中I/O處理所實際消耗的時間,因爲其中既包括排隊用時也包括處理用時。如果它比預期的大,就意味着設備飽和了,或者設備出了問題
avgqu-sz 分配給設備的平均請求數。大於1表示設備已經飽和了。(不過有些設備可以並行處理請求,比如由多個磁盤組成的虛擬設備)
%util 設備使用率。這個值顯示了設備每秒內工作時間的百分比,一般都處於高位。低於60%通常是低性能的表現(也可以從await中看出),不過這個得看設備的類型。接近100%通常意味着飽和.
  1. 網絡
    sar
    -n DEV 1:查看網卡的讀寫帶寬情況
    -n TCP,ETCP 1:Tcp協議的操作情況
  2. 中斷情況
    /proc/interrupts:查看系統當前所有的中斷情況
中斷號 中斷次數 中斷設備名稱
  1. Top命令:
    查看線程執行在具體的core上: top -H -> f/F鍵 -> “Last Used Cpu (SMP)”
    按照CPU使用率排序: -H
    按照內存使用率排序:-M
    展示所有core的使用情況:top -> 1鍵
  2. trace
    1. ftrace,編譯時使用-pg選項,會在函數入口處增加一條call mcount指令。

https://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章