如何使用 kSar 创建 sar 图表来识别 Linux 瓶颈
sar 命令收集、报告或保存 UNIX/Linux 系统活动信息。它会将操作系统中选定的计数器保存到 /var/log/sa/sadd 文件中。从收集的数据中,您可以获得有关服务器的大量信息:
- CPU 利用率
- 内存分页及其利用
- 网络 I/O 和传输统计
- 流程创建活动
- 所有块设备活动
- 中断/秒等等。
sar 命令输出可用于识别服务器瓶颈。但是,分析 sar 提供的信息可能很困难,因此请使用 kSar 工具。kSar 获取 sar 命令输出并在一段时间内绘制一个漂亮且易于理解的图表。
sysstat 包
sar、sa1 和 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?
键入以下yum 命令在基于 CentOS/RHEL 的系统上安装 sysstat:
# yum install sysstat
示例输出:
Loaded plugins: downloadonly, fastestmirror, priorities, : protectbase, security Loading mirror speeds from cached hostfile * addons: mirror.cs.vt.edu * base: mirror.ash.fastserv.com * epel: serverbeach1.fedoraproject.org * extras: mirror.cogentco.com * updates: centos.mirror.nac.net 0 packages excluded due to repository protections Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package sysstat.x86_64 0:7.0.2-3.el5 set to be updated --> Finished Dependency Resolution Dependencies Resolved ==================================================================== Package Arch Version Repository Size ==================================================================== Installing: sysstat x86_64 7.0.2-3.el5 base 173 k Transaction Summary ==================================================================== Install 1 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 173 k Is this ok [y/N]: y Downloading Packages: sysstat-7.0.2-3.el5.x86_64.rpm | 173 kB 00:00 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Installing : sysstat 1/1 Installed: sysstat.x86_64 0:7.0.2-3.el5 Complete!
sysstat 的配置文件
编辑 /etc/sysconfig/sysstat 文件指定日志文件的保存时间(以天为单位),最长为一个月:
# vi /etc/sysconfig/sysstat
示例输出:
# keep log for 28 days # the default is 7 HISTORY=28
保存并关闭文件。
查找 sar 的默认 cron 作业
默认的 cron 作业位于/etc/cron.d/sysstat:
# cat /etc/cron.d/sysstat
示例输出:
# run system activity accounting tool every 10 minutes */10 * * * * root /usr/lib64/sa/sa1 1 1 # generate a daily summary of process accounting at 23:53 53 23 * * * root /usr/lib64/sa/sa2 -A
告诉 sadc 报告磁盘统计信息
使用文本编辑器(例如 joe 命令或 vim 命令)编辑 /etc/cron.d/sysstat 文件,输入:
# vi /etc/cron.d/sysstat
按如下方式更新它以记录所有磁盘统计信息(-d 选项强制记录每个块设备的统计信息,-I 选项强制报告所有系统中断的统计信息):
# run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 -I -d 1 1
# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
在 CentOS/RHEL 7.x 上,您需要传递选项-S DISK来收集块设备的数据。传递-S XALL以收集有关以下内容的数据:
- 磁盘
- 分割
- 系统中断
- 简单网络管理协议
- IPv6
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 -S DISK 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
保存并关闭文件。打开 CentOS/RHEL 版本 5.x/6.x 的服务,输入:
示例输出:
# chkconfig sysstat on
# service sysstat start
Calling the system activity data collector (sadc):
对于 CentOS/RHEL 7.x,运行以下命令:
示例输出:
# systemctl enable sysstat
# systemctl start sysstat.service
# systemctl status sysstat.service
● sysstat.service - Resets System Activity Logs Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; vendor preset: enabled) Active: active (exited) since Sat 2018-01-06 16:33:19 IST; 3s ago Process: 28297 ExecStart=/usr/lib64/sa/sa1 --boot (code=exited, status=0/SUCCESS) Main PID: 28297 (code=exited, status=0/SUCCESS) Jan 06 16:33:19 centos7-box systemd[1]: Starting Resets System Activity Logs... Jan 06 16:33:19 centos7-box systemd[1]: Started Resets System Activity Logs.
如何使用 sar?如何查看统计数据?
使用 sar 命令显示操作系统中选定的累积活动计数器的内容。在此示例中,运行 sar 以从命令行获取有关 CPU 利用率的实时报告:
# sar -u 3 10
示例输出:
Linux 2.6.18-164.2.1.el5 (www-03.example.in) 12/14/2009 09:49:47 PM CPU %user %nice %system %iowait %steal %idle 09:49:50 PM all 5.66 0.00 1.22 0.04 0.00 93.08 09:49:53 PM all 12.29 0.00 1.93 0.04 0.00 85.74 09:49:56 PM all 9.30 0.00 1.61 0.00 0.00 89.10 09:49:59 PM all 10.86 0.00 1.51 0.04 0.00 87.58 09:50:02 PM all 14.21 0.00 3.27 0.04 0.00 82.47 09:50:05 PM all 13.98 0.00 4.04 0.04 0.00 81.93 09:50:08 PM all 6.60 6.89 1.26 0.00 0.00 85.25 09:50:11 PM all 7.25 0.00 1.55 0.04 0.00 91.15 09:50:14 PM all 6.61 0.00 1.09 0.00 0.00 92.31 09:50:17 PM all 5.71 0.00 0.96 0.00 0.00 93.33 Average: all 9.24 0.69 1.84 0.03 0.00 88.20
在哪里,
- 3 = 间隔
- 10 = 计数
要查看进程创建统计信息,请输入:
# sar -c 3 10
要查看 I/O 和传输速率统计信息,请
# sar -b 3 10
输入: 要查看分页统计信息,请输入:
# sar -B 3 10
要查看块设备统计信息,请输入:
# sar -d 3 10
要查看所有中断统计信息的统计信息,请输入:
# sar -I XALL 3 10
要查看特定于设备的网络统计信息,请输入
: 要查看特定于 CPU 的统计信息,请输入:
要查看队列长度和平均负载统计信息,请输入:
要查看内存和交换空间利用率统计信息,请输入:
要查看 inode、文件和其他内核表统计信息的状态,请输入:
要查看系统切换活动统计信息,请输入:
要查看交换统计信息,请输入:
要查看名为 Apache 且 PID 为 #3256 的给定进程的统计信息,请输入:
# sar -n DEV 3 10
# sar -n EDEV 3 10
# sar -P ALL
# Only 1st CPU stats
# sar -P 1 3 10
# sar -q 3 10
# sar -r 3 10
# sar -R 3 10
# sar -v 3 10
# sar -w 3 10
# sar -W 3 10
# sar -x 3256 3 10
向 kSar 问好
sar 和 sadf 提供基于 CLI 的输出。输出可能会让所有新用户/系统管理员感到困惑。因此您需要使用 kSar,这是一个可绘制 sar 数据的 Java 应用程序。它还允许将数据导出为 PDF/JPG/PNG/CSV。您可以通过三种方法加载数据:本地文件、本地命令执行和通过 SSH 的远程命令执行。kSar 支持以下操作系统的 sar 输出:
- Solaris 8、9 和 10
- Mac OS/X 10.4+
- Linux(Systat 版本 >= 5.0.5)
- AIX(4.3 和 5.3)
- HPUX 11.00+
下载并安装 kSar
访问官方网站并获取最新源代码。使用wget下载源代码,输入:
$ wget https://github.com/vlsi/ksar/releases/download/v5.2.4-snapshot-652bf16/ksar-5.2.4-SNAPSHOT-all.jar
如何运行 kSar?
确保JAVA jdk已安装并正常工作。输入以下命令启动 kSar,运行:
$ java -jar ksar-5.2.4-SNAPSHOT-all.jar
图 01:kSar 欢迎屏幕
图 02:kSar - 主窗口
如何使用 kSar 生成 sar 图?
首先,您需要从名为 server1 的服务器获取 sar 命令统计信息。键入以下命令以获取统计信息,运行:
接下来使用 scp 命令将文件从远程框复制到本地桌面:
切换到 kSar Windows。单击数据>从文本文件加载数据> 从 /tmp/ 选择 sar.data.txt > 单击打开按钮。
现在,图形类型树已部署在左窗格中,并且已选择了一个图形:
[server1 ]# LC_ALL=C sar -A > /tmp/sar.data.txt
[desktop ]$ scp user@server1.example.com:/tmp/sar.data.txt /tmp/
图 03:服务器 1 的进程
图 04:server1 的磁盘统计信息(块设备)
图 05:服务器 1 的内存统计信息
放大和缩小
使用移动功能,您可以交互式地放大图形的某个部分。要选择要缩放的区域,请单击左上角,同时按住鼠标,但移动到要缩放的区域的右下角。要返回未缩放的视图,请单击鼠标并将其拖动到右下角以外的任何角落位置。您也可以右键单击并选择缩放选项。
了解 kSar 图表和 sar 数据
我强烈建议阅读 sar 和 sadf 命令手册页:
$ man sar
$ man sadf
案例研究:识别 Linux 服务器 CPU 瓶颈
使用 sar 命令和 kSar 工具,可以获得内存、CPU 和其他子系统的详细快照。例如,如果 CPU 利用率长时间超过 80%,则很可能出现 CPU 瓶颈。使用sar -x ALL可以找出占用 CPU 的进程。mpstat命令(sysstat 包本身的一部分)的输出也可以帮助您了解 CPU 利用率。您可以使用 kSar 轻松分析此信息。
我发现了 CPU 瓶颈……
CPU 的性能调整选项如下:
- 确保后台没有运行不必要的程序。关闭Linux 上所有不必要的服务。
- 使用cron 安排作业(例如备份)在非高峰时段运行。
- 使用top 和 ps 命令找出所有非关键后台作业/服务。确保使用renice 命令降低其优先级。
- 使用taskset命令设置进程的CPU亲和性(卸载CPU),即将进程绑定到不同的CPU。例如,在CPU #2上运行MySQL数据库,在CPU #3上运行Apache。
- 确保您正在为服务器使用最新的驱动程序和固件。
- 如果可能的话,请向系统添加额外的 CPU。
- 对单线程应用程序(例如 Lighttpd Web 服务器应用程序)使用更快的 CPU。
- 对多线程应用程序(例如 MySQL 数据库服务器应用程序)使用更多 CPU。
- 使用更多计算机节点并为 Web 应用程序设置负载均衡器。
isag – 交互式系统活动图表(替代工具)
isag 命令以图形方式显示由先前的 sar 运行存储在二进制数据文件中的系统活动数据。isag 命令调用 sar 来提取要绘制的数据。与 kSar 相比,isag 的选项有限。
图 6:isag CPU 利用率图表
参考:
- 如何找出 Linux CPU 利用率?
- kSar主页。
- isag主页。