歡迎光臨
每天分享高質量文章

使用 sar 和 kSar 來發現 Linux 效能瓶頸 | Linux 中國

sar 命令的輸出能夠用於識別伺服器瓶頸。但是,分析 sar 命令提供的資訊可能比較困難,所以要使用 kSar 工具。kSar 工具可以將 sar 命令的輸出繪製成基於時間週期的、易於理解的圖表。
— Vivek Gite


致謝
編譯自 | https://www.cyberciti.biz/tips/identifying-linux-bottlenecks-sar-graphs-with-ksar.html 
 作者 | Vivek Gite
 譯者 | qhwdw ? ? ? ? ? 共計翻譯:86 篇 貢獻時間:123 天

 

sar 命令用用收集、報告、或者儲存 UNIX / Linux 系統的活動資訊。它儲存選擇的計數器到作業系統的 /var/log/sa/sadd 檔案中。從收集的資料中,你可以得到許多關於你的伺服器的資訊:

☉ CPU 使用率
☉ 記憶體頁面和使用率
☉ 網路 I/O 和傳輸統計
☉ 行程建立活動
☉ 所有的塊裝置活動
☉ 每秒中斷數等等

sar 命令的輸出能夠用於識別伺服器瓶頸。但是,分析 sar 命令提供的資訊可能比較困難,所以要使用 kSar 工具。kSar 工具可以將 sar 命令的輸出繪製成基於時間週期的、易於理解的圖表。

sysstat 包

sarsa1、和 sa2 命令都是 sysstat 包的一部分。它是 Linux 包含的效能監視工具集合。

☉ sar:顯示資料
☉ sa1 和 sa2:收集和儲存資料用於以後分析。sa2 shell 指令碼在 /var/log/sa 目錄中每日寫入一個報告。sa1 shell 指令碼將每日的系統活動資訊以二進位制資料的形式寫入到檔案中。
☉ sadc —— 系統活動資料收集器。你可以透過修改 sa1 和 sa2 指令碼去配置各種選項。它們位於以下的目錄:

◈ /usr/lib64/sa/sa1 (64 位)或者 /usr/lib/sa/sa1 (32 位) —— 它呼叫 sadc 去記錄報告到 /var/log/sa/sadX 格式。
◈ /usr/lib64/sa/sa2 (64 位)或者 /usr/lib/sa/sa2 (32 位) —— 它呼叫 sar 去記錄報告到 /var/log/sa/sarX 格式。

如何在我的系統上安裝 sar?

在一個基於 CentOS/RHEL 的系統上,輸入如下的 yum 命令[1] 去安裝 sysstat:

  1. # yum install sysstat

示例輸出如下:

  1. Loaded plugins: downloadonly, fastestmirror, priorities,

  2.              : protectbase, security

  3. Loading mirror speeds from cached hostfile

  4. * addons: mirror.cs.vt.edu

  5. * base: mirror.ash.fastserv.com

  6. * epel: serverbeach1.fedoraproject.org

  7. * extras: mirror.cogentco.com

  8. * updates: centos.mirror.nac.net

  9. 0 packages excluded due to repository protections

  10. Setting up Install Process

  11. Resolving Dependencies

  12. --> Running transaction check

  13. ---> Package sysstat.x86_64 0:7.0.2-3.el5 set to be updated

  14. --> Finished Dependency Resolution

  15. Dependencies Resolved

  16. ====================================================================

  17. Package        Arch          Version             Repository   Size

  18. ====================================================================

  19. Installing:

  20. sysstat        x86_64        7.0.2-3.el5         base        173 k

  21. Transaction Summary

  22. ====================================================================

  23. Install      1 Package(s)

  24. Update       0 Package(s)

  25. Remove       0 Package(s)

  26. Total download size: 173 k

  27. Is this ok [y/N]: y

  28. Downloading Packages:

  29. sysstat-7.0.2-3.el5.x86_64.rpm               | 173 kB     00:00

  30. Running rpm_check_debug

  31. Running Transaction Test

  32. Finished Transaction Test

  33. Transaction Test Succeeded

  34. Running Transaction

  35.  Installing     : sysstat                                      1/1

  36. Installed:

  37.  sysstat.x86_64 0:7.0.2-3.el5

  38. Complete!

為 sysstat 配置檔案

編輯 /etc/sysconfig/sysstat 檔案去指定日誌檔案儲存多少天(最長為一個月):

  1. # vi /etc/sysconfig/sysstat

示例輸出如下 :

  1. # keep log for 28 days

  2. # the default is 7

  3. HISTORY=28

儲存並關閉這個檔案。

找到 sar 預設的 cron 作業

預設的 cron 作業位於[2] /etc/cron.d/sysstat

  1. # cat /etc/cron.d/sysstat

示例輸出如下:

  1. # run system activity accounting tool every 10 minutes

  2. */10 * * * * root /usr/lib64/sa/sa1 1 1

  3. # generate a daily summary of process accounting at 23:53

  4. 53 23 * * * root /usr/lib64/sa/sa2 -A

告訴 sadc 去報告磁碟的統計資料

使用一個文字編輯器去編輯 /etc/cron.d/sysstat 檔案,比如使用 vim 命令,輸入如下:

  1. # vi /etc/cron.d/sysstat

像下麵的示例那樣更新這個檔案,以記錄所有的硬碟統計資料(-d 選項強制記錄每個塊裝置的統計資料,而 -I 選項強制記錄所有系統中斷的統計資料):

  1. # run system activity accounting tool every 10 minutes

  2. */10 * * * * root /usr/lib64/sa/sa1 -I -d 1 1

  3. # generate a daily summary of process accounting at 23:53

  4. 53 23 * * * root /usr/lib64/sa/sa2 -A

在 CentOS/RHEL 7.x 系統上你需要傳遞 -S DISK 選項去收集塊裝置的資料。傳遞 -S XALL 選項去採集如下所列的資料:

☉ 磁碟
☉ 分割槽
☉ 系統中斷
☉ SNMP
☉ IPv6
  1. # Run system activity accounting tool every 10 minutes

  2. */10 * * * * root /usr/lib64/sa/sa1 -S DISK 1 1

  3. # 0 * * * * root /usr/lib64/sa/sa1 600 6 &

  4. # Generate a daily summary of process accounting at 23:53

  5. 53 23 * * * root /usr/lib64/sa/sa2 -A

  6. # Run system activity accounting tool every 10 minutes

儲存並關閉這個檔案。

開啟 CentOS/RHEL 版本 5.x/6.x 的服務

輸入如下命令:

  1. chkconfig sysstat on

  2. service sysstat start

示例輸出如下:

  1. Calling the system activity data collector (sadc):

對於 CentOS/RHEL 7.x,執行如下的命令:

  1. # systemctl enable sysstat

  2. # systemctl start sysstat.service

  3. # systemctl status sysstat.service

示例輸出:

  1. sysstat.service - Resets System Activity Logs

  2.   Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; vendor preset: enabled)

  3.   Active: active (exited) since Sat 2018-01-06 16:33:19 IST; 3s ago

  4.  Process: 28297 ExecStart=/usr/lib64/sa/sa1 --boot (code=exited, status=0/SUCCESS)

  5. Main PID: 28297 (code=exited, status=0/SUCCESS)

  6. Jan 06 16:33:19 centos7-box systemd[1]: Starting Resets System Activity Logs...

  7. Jan 06 16:33:19 centos7-box systemd[1]: Started Resets System Activity Logs.

如何使用 sar?如何檢視統計資料?

使用 sar 命令去顯示作業系統中選定的累積活動計數器輸出。在這個示例中,執行 sar 命令列,去實時獲得 CPU 使用率的報告:

  1. # sar -u 3 10

示例輸出:

  1. Linux 2.6.18-164.2.1.el5 (www-03.nixcraft.in)   12/14/2009

  2. 09:49:47 PM CPU %user %nice %system %iowait %steal %idle

  3. 09:49:50 PM all 5.66 0.00 1.22 0.04 0.00 93.08

  4. 09:49:53 PM all 12.29 0.00 1.93 0.04 0.00 85.74

  5. 09:49:56 PM all 9.30 0.00 1.61 0.00 0.00 89.10

  6. 09:49:59 PM all 10.86 0.00 1.51 0.04 0.00 87.58

  7. 09:50:02 PM all 14.21 0.00 3.27 0.04 0.00 82.47

  8. 09:50:05 PM all 13.98 0.00 4.04 0.04 0.00 81.93

  9. 09:50:08 PM all 6.60 6.89 1.26 0.00 0.00 85.25

  10. 09:50:11 PM all 7.25 0.00 1.55 0.04 0.00 91.15

  11. 09:50:14 PM all 6.61 0.00 1.09 0.00 0.00 92.31

  12. 09:50:17 PM all 5.71 0.00 0.96 0.00 0.00 93.33

  13. Average: all 9.24 0.69 1.84 0.03 0.00 88.20

其中:

◈ 3 表示間隔時間
◈ 10 表示次數

檢視行程建立的統計資料,輸入:

  1. # sar -c 3 10

檢視 I/O 和傳輸率統計資料,輸入:

  1. # sar -b 3 10

檢視記憶體頁面統計資料,輸入:

  1. # sar -B 3 10

檢視塊裝置統計資料,輸入:

  1. # sar -d 3 10

檢視所有中斷的統計資料,輸入:

  1. # sar -I XALL 3 10

檢視網路裝置特定的統計資料,輸入:

  1. # sar -n DEV 3 10

  2. # sar -n EDEV 3 10

檢視 CPU 特定的統計資料,輸入:

  1. # sar -P ALL

  2. # Only 1st CPU stats

  3. # sar -P 1 3 10

檢視佇列長度和平均負載的統計資料,輸入:

  1. # sar -q 3 10

檢視記憶體和交換空間的使用統計資料,輸入:

  1. # sar -r 3 10

  2. # sar -R 3 10

檢視 inode、檔案、和其它核心表統計資料狀態,輸入:

  1. # sar -v 3 10

檢視系統切換活動統計資料,輸入:

  1. # sar -w 3 10

檢視交換統計資料,輸入:

  1. # sar -W 3 10

檢視一個 PID 為 3256 的 Apache 行程,輸入:

  1. # sar -x 3256 3 10

kSar 介紹

sar 和 sadf 提供了基於命令列介面的輸出。這種輸出可能會使新手使用者/系統管理員感到無從下手。因此,你需要使用 kSar,它是一個圖形化顯示你的 sar 資料的 Java 應用程式。它也允許你以 PDF/JPG/PNG/CSV 格式匯出資料。你可以用三種方式去載入資料:本地檔案、執行本地命令、以及透過 SSH 遠端執行的命令。kSar 可以處理下列作業系統的 sar 輸出:

☉ Solaris 8, 9 和 10
☉ Mac OS/X 10.4+
☉ Linux (Systat Version >= 5.0.5)
☉ AIX (4.3 & 5.3)
☉ HPUX 11.00+

下載和安裝 kSar

訪問 官方[3] 網站去獲得最新版本的原始碼。使用 wget[4] 去下載原始碼,輸入:

  1. $ wget https://github.com/vlsi/ksar/releases/download/v5.2.4-snapshot-652bf16/ksar-5.2.4-SNAPSHOT-all.jar

如何執行 kSar?

首先要確保你的機器上 JAVA jdk[5] 已安裝並能夠正常工作。輸入下列命令去啟動 kSar:

  1. $ java -jar ksar-5.2.4-SNAPSHOT-all.jar

kSar welcome screen

接下來你將看到 kSar 的主視窗,和有兩個選單的面板。

kSar - the main window

左側有一個串列,是 kSar 根據資料已經解析出的可用圖表的串列。右側視窗將展示你選定的圖表。

如何使用 kSar 去生成 sar 圖表?

首先,你需要從命名為 server1 的伺服器上採集 sar 命令的統計資料。輸入如下的命令:

  1. [ server1 ]# LC_ALL=C sar -A  > /tmp/sar.data.txt

接下來,使用 scp 命令從本地桌面複製到遠端電腦上:

  1. [ desktop ]$ scp user@server1.nixcraft.com:/tmp/sar.data.txt /tmp/

切換到 kSar 視窗,點選 “Data” > “Load data from text file” > 從 /tmp/ 中選擇 sar.data.txt > 點選 “Open” 按鈕。

現在,圖表型別樹已經出現在左側面板中並選定了一個圖形:

Linux kSar Processes for server1

Linux Disk I/O Stats Using kSar

Linux Memory paging and its utilization stats

放大和縮小

透過移動你可以互動式縮放影象的一部分。在要縮放的影象的左上角點選並按下滑鼠,移動到要縮放區域的右下角,可以選定要縮放的區域。傳回到未縮放狀態,點選並拖動滑鼠到除了右下角外的任意位置,你也可以點選並選擇 zoom 選項。

瞭解 kSar 影象和 sar 資料

我強烈建議你去閱讀 sar 和 sadf 命令的 man 頁面:

  1. $ man sar

  2. $ man sadf

案例學習:識別 Linux 伺服器的 CPU 瓶頸

使用 sar 命令和 kSar 工具,可以得到記憶體、CPU、以及其它子系統的詳細快照。例如,如果 CPU 使用率在一個很長的時間內持續高於 80%,有可能就是出現了一個 CPU 瓶頸。使用 sar -x ALL 你可以找到大量消耗 CPU 的行程。

mpstat 命令[6] 的輸出(sysstat 包的一部分)也會幫你去瞭解 CPU 的使用率。但你可以使用 kSar 很容易地去分析這些資訊。

找出 CPU 瓶頸後 …

對 CPU 執行如下的調整:

☉ 確保沒有不需要的行程在後臺執行。關閉 Linux 上所有不需要的服務[7]
☉ 使用 cron[2] 在一個非高峰時刻執行任務(比如,備份)。
☉ 使用 top 和 ps 命令[8] 去找出所有非關鍵的後臺作業/服務。使用 renice 命令[9] 去調整低優先順序作業。
☉ 使用 taskset 命令去設定行程使用的 CPU [10] (解除安裝所使用的 CPU),即,系結行程到不同的 CPU 上。例如,在 2# CPU 上執行 MySQL 資料庫,而在 3# CPU 上執行 Apache。
☉ 確保你的系統使用了最新的驅動程式和韌體。
☉ 如有可能在系統上增加額外的 CPU。
☉ 為單執行緒應用程式使用更快的 CPU(比如,Lighttpd web 伺服器應用程式)。
☉ 為多執行緒應用程式使用多個 CPU(比如,MySQL 資料庫伺服器應用程式)。
☉ 為一個 web 應用程式使用多個計算節點並設定一個 負載均衡器[11]

isag —— 互動式系統活動記錄器(替代工具)

isag 命令圖形化顯示了以前執行 sar 命令時儲存在二進位制檔案中的系統活動資料。isag 命令取用 sar 並提取出它的資料來繪製圖形。與 kSar 相比,isag 的選項比較少。

Fig.06: isag CPU utilization graphs

關於作者

本文作者是 nixCraft 的創始人和一位經驗豐富的 Linux 作業系統/Unix shell 指令碼培訓師。他與包括 IT、教育、國防和空間研究、以及非營利組織等全球各行業客戶一起合作。可以在 Twitter[12]Facebook[13]Google+[14] 上關註他。


via: https://www.cyberciti.biz/tips/identifying-linux-bottlenecks-sar-graphs-with-ksar.html

作者:Vivek Gite[16] 譯者:qhwdw 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖