使用 nmon 来排查与监控 Linux 系统的性能
nmon
) 是一个系统性能监控工具,其初由 IBM 为 AIX 操作系统研发,后来被移植到 Linux 中(在多个 CPU 架构上运行)。nmon
允许您在一个简洁的界面中来监控系统的各个方面,如 CPU 利用率、内存、磁盘繁忙度、网络利用率等。这是它的一个主要的好处。假如没有 nmon
,您必须使用专门的监控工具,如 top
(监控进程)、iostat
(监控磁盘)和 ifstat
(监控网络)来监控各种资源。这其中的每一个呈现数据的方式都是截然不同的。nmon
。通过使用 nmon
,我可以解决一些难以发现的问题,包括初的那个看起来像似网络瓶颈的问题。我通过使用 nmon
来同时检查多个资源,之后发现这是由于打开太多文件导致的一个应用程序问题。nmon
来收集和存储性能数据以供分析。有关用于 Linux 的 nmon
的更多信息,请参阅该项目的官方网站。安装 nmon
nmon
在许多 Linux 发行版的默认存储库中都是可用的。例如,我们可以在 Fedora35 上使用 DNF 来安装它:$ sudo dnf -y install nmon
nmon
在 EPEL(Extra Packages for Enterprise Linux) 的存储库中可用。nmon
,首先需启用 EPEL:$ sudo dnf -y install \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
$ sudo dnf repolist
dnf
安装 nmon
:$ sudo dnf -y install nmon
nmon
,使用它来监控您的系统吧!以交互的方式使用 nmon
nmon
。之后您会看到一个包含系统信息和一个小帮助菜单的初始屏幕,它显示了您可以按哪些键来切换不同的指标:$ nmon
┌─16k──[H for help]──Hostname=f35ks01─Refresh= 2secs ─18:04:27────┐
│ │
│------------------------------ │
│ _ __ _ __ ___ ___ _ __ For help type H or ... │
│| '_ \| '_ ` _ \ / _ \| '_ \ nmon -? - hint │
│| | | | | | | | | (_) | | | | nmon -h - full details │
│|_| |_|_| |_| |_|\___/|_| |_| │
│ To stop nmon type q to Quit │
│------------------------------ │
│ │
│Fedora release 35 (Thirty Five) VERSION="35 (Thirty Five)" │
│Vendor=AuthenticAMD Model=AMD EPYC-Milan Processor │
│MHz=1911.004 bogomips=3822.00 lscpu:CPU=4 Little Endian │
│ProcessorChips=4 PhysicalCores=1 Sockets=4 Cores=1 Thrds=1│
│ VirtualCPUs =4 MHz=0 max=0 min=0 │
│ │
│Use these keys to toggle statistics on/off: │
│ c = CPU l = CPU Long-term - = Faster screen updates│
│ C = " WideView U = Utilisation + = Slower screen updates│
│ m = Memory V = Virtual memory j = File Systems │
│ d = Disks n = Network . = only busy disks/procs│
│ r = Resource N = NFS h = more options │
│ k = Kernel t = Top-processes q = Quit │
│─────────────────────────────────────────────────────────────────│
┌─16k──[H for help]──Hostname=f35ks01─Refresh= 2secs ─18:05:58─┐
│ CPU Utilisation ─────────────────────────────────────────────│
│---------------------------+---------------------------------+│
│CPU User% Sys% Wait% Idle|0 |25 |50 |75 100| │
│ 1 3.6 17.2 0.0 79.2|Ussssssss> | │
│ 2 2.1 6.2 0.0 91.7|Usss > | │
│ 3 0.0 1.1 0.0 98.9| > | │
│ 4 6.1 17.2 0.0 0.5|UUUssssssss> | │
│---------------------------+---------------------------------+│
│Avg 3.0 10.3 0.0 86.7|Usssss> | │
│---------------------------+---------------------------------+│
│──────────────────────────────────────────────────────────────│
┌─16k──[H for help]──Hostname=f35ks01─Refresh= 2secs ─18:17:01─┐
│ CPU Utilisation ─────────────────────────────────────────────│
│---------------------------+---------------------------------+│
│CPU User% Sys% Wait% Idle|0 |25 |50 |75 100| │
│ 1 2.6 10.3 0.0 87.1|Usssss > | │
│ 2 0.0 2.2 0.0 97.8|s > | │
│ 3 6.5 11.0 0.0 82.5|UUUsssss> | │
│ 4 0.0 0.5 0.0 99.5| > | │
│---------------------------+---------------------------------+│
│Avg 2.4 5.9 0.0 91.6|Uss > | │
│---------------------------+---------------------------------+│
│ Network I/O ─────────────────────────────────────────────────│
│I/F Name Recv=KB/s Trans=KB/s p_in p_out in_sz out_sz Peak->..│
│ lo 0.0 0.0 0.0 0.0 0.0 0.0...│
│ enp1s0 0.0 0.0 0.5 0.0 52.0 0.0...│
│ enp7s0 218.6 5923.4 3335.5 9989.68 67.1 607.2...│
│ Network Error Counters ──────────────────────────────────────│
│I/F Name iErrors iDrop iOverrun iFrame oErrors oDrop oOver..│
│ lo 0 0 0 0 0 0 ...│
│ enp1s0 0 34419 0 0 0 0 ...│
│ enp7s0 0 34419 0 0 0 0 ...│
│──────────────────────────────────────────────────────────────│
nmon
是一个可帮助您了解系统行为的高度灵活的工具。它还可以通过同时显示不同的指标来帮助解决问题,通过提供系统的整体视图以提高您理解问题的能力。收集性能数据
nmon
,这样就可以从系统中收集长时间的性能数据以进行后验分析。nmon
,请在启动应用程序时使用标志 -f
参数(它必须是提供的个参数)。默认情况下,在一天内,nmon
每五分钟收集一次数据。您可以用参数 -s
来指定收集间隔和参数 -c
来指定快照数量。nmon
批处理模式,我们想在一小时内,每分钟收集数据一次,同时包括捕获进程 -t
,执行以下命令:$ nmon -f -s60 -c60 -t
ps
命令,然后就可以看到它正在运行了:$ ps -ef | grep nmon
ricardo 1849 1 0 12:27 pts/0 00:00:00 nmon -f -s60 -c60 -t
nmon
使用逗号分隔值 (Comma-Separated Value, CSV) 格式将收集的数据保存在当前目录中,其扩展名为 .nmon
:$ ls -l
total 36
-rw-r--r--. 1 ricardo ricardo 36395 Feb 13 12:28 f35ks01_220213_1227.nmon
$ head f35ks01_220213_1227.nmon
AAA,progname,nmon
AAA,command,nmon -f -s60 -c60 -t
AAA,version,16k
AAA,disks_per_line,150
AAA,max_disks,256,set by -d option
AAA,disks,10,
AAA,host,f35ks01
AAA,user,ricardo
AAA,OS,Linux,5.16.8-200.fc35.x86_64,#1 SMP PREEMPT Tue Feb 8 20:58:59 UTC 2022,x86_64
AAA,runname,f35ks01
nmon
开发团队还提供了一个脚本,该脚本可将这些数据转换为 Web 浏览器能可视化查看的图表。接下来我们看看如何做到这一点。生成图表
nmon
的开发人员创造了 nmonchart
。此 shell 脚本使用 Google Charts(JavaScript)将这些数据转换为 HTML,以使其在图形环境中可视化数据并与之交互。nmoncart
,请从 nmon
主页下载:$ curl -LO http://sourceforge.net/projects/nmon/files/nmonchart40.tar
tar
来提取包的内容:$ mkdir nmonchart
$ tar xvf nmonchart40.tar -C nmonchart
nmonchart
需要使用 ksh(Korn SHell),因此要创建图表,首先应使用 dnf
在您的系统中安装 ksh
:$ sudo dnf install -y ksh
.nmon
文件(该文件是在批处理模式下执行 nmon
时创建的):$ ./nmonchart/nmonchart f35ks01_220213_1227.nmon
.nmon
文件同名的 HTML 文件。或者,您可以将目标文件名作为第二个参数传递给 nmonchart
。这是一个例子:$ ls -lg
total 4164
-rw-r--r--. 1 ricardo 113822 Feb 14 18:52 f35ks01_220213_1227.html
-rw-r--r--. 1 ricardo 93436 Feb 13 13:26 f35ks01_220213_1227.nmon
drwx------. 2 ricardo 4096 Aug 28 2020 nmonchart
推荐一个关于 bash shell 脚本的书籍————《Bash shell scripting cheat sheet》
可视化性能图表
nmonchart
为您提供的每个 .nmon
源文件创建一个 HTML 文件,其中嵌入了所需的图表 JavaScript 库。如果本地计算机上有 HTML 文件,请直接在 Web 浏览器中查看它。$ mkdir html
$ mv f35ks01_220213_1227.html html/
$ podman run --rm -v ./html:/usr/share/nginx/html:ro,Z -p 8080:80 -d nginx
$ sudo firewall-cmd --add-port 8080/tcp
http://<YOUR_SERVER_IP_ADDR>:8080/f35ks01_220213_1227.html
:总结
nmon
是一款灵活且功能强大的系统监控应用程序,它可帮助您更好地了解系统,并在出现问题时及时地对其进行故障排除。它结合了监控能力、整合来自不同系统资源的实时数据的能力,以及长期性能数据收集和分析的能力。这使其成为您的系统管理员的工具。相关文章