12个 Linux 性能监控和调试工具

网友投稿 1353 2022-05-29

我编译了 12 个性能监控和调试工具,里面一定有适合您特定调试和监视场景的工具。

1. SAR

使用 sar 实用程序可以做两件事:1) 监控系统实时性能(CPU、内存、I/O 等) 2) 持续在后台收集性能数据并分析历史数据以识别瓶颈。

Sar 是 sysstat 包的一部分。以下是您可以使用 sar 实用程序执行的一些操作。

集体 CPU 使用率

单个 CPU 统计信息

已使用和可用的内存

已使用和可用的交换空间

系统的整体 I/O 活动

单个设备 I/O 活动

上下文切换统计

运行队列并加载平均数据

网络统计

报告特定时间的sar数据

以下 sar 命令将显示系统 CPU 统计信息 3 次(间隔 1 秒)。

以下“sar -b”命令报告 I/O 统计信息。“1 3”表示每1秒执行一次sar -b,共执行3次。

$ sar -b 1 3 Linux 2.6.18-194.el5PAE (dev-db) 03/26/2011 _i686_ (8 CPU) 01:56:28 PM tps rtps wtps bread/s bwrtn/s 01:56:29 PM 346.00 264.00 82.00 2208.00 768.00 01:56:30 PM 100.00 36.00 64.00 304.00 816.00 01:56:31 PM 282.83 32.32 250.51 258.59 2537.37 Average: 242.81 111.04 131.77 925.75 1369.90

2.tcpdump

tcpdump 是一个网络数据包分析器。使用 tcpdump 您可以捕获数据包并分析它是否存在任何性能瓶颈。

以下 tcpdump 命令示例以 ASCII 格式显示捕获的数据包。

$ tcpdump -A -i eth0 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 14:34:50.913995 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 1457239478:1457239594(116) ack 1561461262 win 63652 E.....@.@..]..i...9...*.V...]...P....h....E...>{..U=...g. ......G..7\+KA....A...L. 14:34:51.423640 IP valh4.lell.net.ssh > yy.domain.innetbcp.net.11006: P 116:232(116) ack 1 win 63652 E.....@.@..\..i...9...*.V..*]...P....h....7......X..!....Im.S.g.u:*..O&....^#Ba... E..(R.@.|.....9...i.*...]...V..*P..OWp........

使用 tcpdump,您可以根据几个自定义条件捕获数据包。例如,捕获流经特定端口的数据包,捕获两个特定主机之间的 tcp 通信,捕获属于特定协议类型的数据包等。

3. Nagios

Nagios 是一个开源监控解决方案,可以监控 IT 基础架构中的几乎所有内容。例如,当服务器宕机时,它可以向您的系统管理员团队发送通知,当数据库宕机时,它可以寻呼您的 DBA 团队,当 Web 服务器宕机时,它可以通知相应的团队。

您还可以为各种服务设置警告和严重阈值级别,以帮助您主动解决问题。例如,当磁盘分区已满 80% 时,它可以通知系统管理员团队,这将为系统管理员团队提供足够的时间在问题变得严重之前添加更多空间。

Nagios 还具有非常好的用户界面,您可以从中监控整个 IT 基础架构的运行状况。

以下是您可以使用 Nagios 监控的一些内容:

任何硬件(服务器、交换机、路由器等)

Linux 服务器和 Windows 服务器

数据库(Oracle、MySQL、PostgreSQL 等)

在您的操作系统上运行的各种服务(sendmail、nis、nfs、ldap 等)

网络服务器

您的自定义应用程序

等等

4.Iostat

iostat 报告 CPU、磁盘 I/O 和 NFS 统计信息。以下是一些 iostat 命令示例。

不带任何参数的 Iostat 显示有关 CPU 使用率的信息,以及有关系统上所有分区的 I/O 统计信息,如下所示。

$ iostat Linux 2.6.32-100.28.5.el6.x86_64 (dev-db) 07/09/2011 avg-cpu: %user %nice %system %iowait %steal %idle 5.68 0.00 0.52 2.03 0.00 91.76 Device: tps Blk_read /s Blk_wrtn/s Blk_read Blk_wrtn sda 194.72 1096.66 1598.70 2719068704 3963827344 sda1 178.20 773.45 1329.09 1917686794 3295354888 sda2 16.51 323.19 269.61 801326686 668472456 sdb 371.31 945.97 1073.33 2345452365 2661206408 sdb1 371.31 945.95 1073.33 2345396901 2661206408 sdc 408.03 207.05 972.42 513364213 2411023092 sdc1 408.03 207.03 972.42 513308749 2411023092

默认情况下,iostat 显示系统中所有可用磁盘的 I/O 数据。要查看特定设备(例如 /dev/sda)的统计信息,请使用选项 -p,如下所示。

$ iostat -p sda Linux 2.6.32-100.28.5.el6.x86_64 (dev-db) 07/09/2011 avg-cpu: %user %nice %system %iowait %steal %idle 5.68 0.00 0.52 2.03 0.00 91.76 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn sda 194.69 1096.51 1598.48 2719069928 3963829584 sda2 336.38 27.17 54.00 67365064 133905080 sda1 821.89 0.69 243.53 1720833 603892838

5.mpstat

mpstat 报告处理器统计信息。以下是一些 mpstat 命令示例。

选项-A,显示mpstat命令可以显示的所有信息,如下图。这实际上等同于“mpstat -I ALL -u -P ALL”命令。

$ mpstat -A Linux 2.6.32-100.28.5.el6.x86_64 (dev-db) 07/09/2011 _x86_64_ (4 CPU) 10:26:34 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 10:26:34 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.99 10:26:34 PM 0 0.01 0.00 0.01 0.01 0.00 0.00 0.00 0.00 99.98 10:26:34 PM 1 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98 10:26:34 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 10:26:34 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 10:26:34 PM CPU intr/s 10:26:34 PM all 36.51 10:26:34 PM 0 0.00 10:26:34 PM 1 0.00 10:26:34 PM 2 0.04 10:26:34 PM 3 0.00 10:26:34 PM CPU 0/s 1/s 8/s 9/s 12/s 14/s 15/s 16/s 19/s 20/s 21/s 33/s NMI/s LOC/s SPU/s PMI/s PND/s RES/s CAL/s TLB/s TRM/s THR/s MCE/s MCP/s ERR/s MIS/s 10:26:34 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 7.47 0.00 0.00 0.00 0.00 0.02 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:26:34 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 4.90 0.00 0.00 0.00 0.00 0.03 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:26:34 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.04 0.00 0.00 0.00 0.00 0.00 3.32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10:26:34 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.

mpstat 选项 -P ALL,显示所有单个 CPU(或核心)及其统计信息,如下所示。

$ mpstat -P ALL Linux 2.6.32-100.28.5.el6.x86_64 (dev-db) 07/09/2011 _x86_64_ (4 CPU) 10:28:04 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 10:28:04 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.99 10:28:04 PM 0 0.01 0.00 0.01 0.01 0.00 0.00 0.00 0.00 99.98 10:28:04 PM 1 0.00 0.00 0.01 0.00 0.00 0.00 0.00 0.00 99.98 10:28:04 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 10:28:04 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

6.vmstat

vmstat 报告虚拟内存统计信息。以下是一些 vmstat 命令示例。

vmstat 默认会显示内存使用情况(包括交换),如下所示。

$ vmstat procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 305416 260688 29160 2356920 2 2 4 1 0 0 6 1 92 2 0 To execute vmstat every 2 seconds for 10 times, do the following. After executing 10 times, it will stop automatically. $ vmstat 2 10 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 537144 182736 6789320 0 0 0 0 1 1 0 0 100 0 0 0 0 0 537004 182736 6789320 0 0 0 0 50 32 0 0 100 0 0

iostat 和 vmstat 是 sar 实用程序的一部分。您应该安装 sysstat 包以使 iostat 和 vmstat 正常工作。

12个 Linux 性能监控和调试工具

7. PS 命令

进程是程序的运行实例。Linux 是一种多任务操作系统,这意味着可以同时激活多个进程。使用 ps 命令找出系统上正在运行的进程。

ps 命令还为您提供有关正在运行的进程的许多附加信息,这将帮助您识别系统上的任何性能瓶颈。

以下是几个 ps 命令示例。

使用 -u 选项显示属于特定用户名的进程。如果您有多个用户名,请使用逗号分隔它们。下面的示例显示了用户 wwwrun 或 postfix 拥有的所有进程。

$ ps -f -u wwwrun,postfix UID PID PPID C STIME TTY TIME CMD postfix 7457 7435 0 Mar09 ? 00:00:00 qmgr -l -t fifo -u wwwrun 7495 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 7496 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 7497 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 7498 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 7499 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 10078 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf wwwrun 10082 7491 0 Mar09 ? 00:00:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf postfix 15677 7435 0 22:23 ? 00:00:00 pickup -l -t fifo -u

下面的示例以层次结构显示进程 ID 和命令。–forest 是 ps 命令的一个参数,它显示进程树的 ASCII 艺术。从这棵树中,我们可以识别出哪个是父进程,哪个是它以递归方式分叉的子进程。

$ ps -e -o pid,args --forest 468 \_ sshd: root@pts/7 514 | \_ -bash 17484 \_ sshd: root@pts/11 17513 | \_ -bash 24004 | \_ vi ./790310__11117/journal 15513 \_ sshd: root@pts/1 15522 | \_ -bash 4280 \_ sshd: root@pts/5 4302 | \_ -bash

8. free

Free 命令显示有关系统的物理 (RAM) 和交换内存的信息。

在下面的示例中,此系统上的总物理内存为 1GB。下面显示的值以 KB 为单位。

# free total used free shared buffers cached Mem: 1034624 1006696 27928 0 174136 615892 -/+ buffers/cache: 216668 817956 Swap: 2031608 0 2031608

以下示例将显示系统上的总内存,包括 RAM 和交换。

在以下命令中:

选项 m 以 MB 为单位显示值

选项 t 显示“Total”行,它是物理和交换内存值的总和

选项 o 是从上面的示例中隐藏缓冲区/缓存行。

# free -mto total used free shared buffers cached Mem: 1010 983 27 0 170 601 Swap: 1983 0 1983 Total: 2994 983 2011

9. top

top 命令按某些列排序显示系统中所有正在运行的进程。这会实时显示信息。

您可以在不从顶部退出的情况下终止进程。一旦你找到了一个需要被杀死的进程,按下“k”,它会询问进程 ID,并发送信号。如果您有权杀死该特定 PID,它将被成功杀死。

PID to kill: 1309 Kill PID 1309 with signal [15]: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1309 geek 23 0 2483m 1.7g 27m S 0 21.8 45:31.32 gagent 1882 geek 25 0 2485m 1.7g 26m S 0 21.7 22:38.97 gagent 5136 root 16 0 38040 14m 9836 S 0 0.2 0:00.39 nautilus

使用 top -u 仅在 top 命令输出中显示特定用户进程。

$ top -u geek

在运行 unix top 命令时,按 u 将询问用户名,如下所示。

Which user (blank for all): geek PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1309 geek 23 0 2483m 1.7g 27m S 0 21.8 45:31.32 gagent 1882 geek 25 0 2485m 1.7g 26m S 0 21.7 22:38.97 gagent

10. Pmap

pmap 命令显示给定进程的内存映射。您需要将 pid 作为参数传递给 pmap 命令。

以下示例显示当前 bash shell 的内存映射。在本例中,5732 是 bash shell 的 PID。

$ pmap 5732 5732: -bash 00393000 104K r-x-- /lib/ld-2.5.so 003b1000 1272K r-x-- /lib/libc-2.5.so 00520000 8K r-x-- /lib/libdl-2.5.so 0053f000 12K r-x-- /lib/libtermcap.so.2.0.8 0084d000 76K r-x-- /lib/libnsl-2.5.so 00c57000 32K r-x-- /lib/libnss_nis-2.5.so 00c8d000 36K r-x-- /lib/libnss_files-2.5.so b7d6c000 2048K r---- /usr/lib/locale/locale-archive bfd10000 84K rw--- [ stack ] total 4796K

pmap -x 提供了一些关于内存映射的附加信息。

$ pmap -x 5732 5732: -bash Address Kbytes RSS Anon Locked Mode Mapping 00393000 104 - - - r-x-- ld-2.5.so 003b1000 1272 - - - r-x-- libc-2.5.so 00520000 8 - - - r-x-- libdl-2.5.so 0053f000 12 - - - r-x-- libtermcap.so.2.0.8 0084d000 76 - - - r-x-- libnsl-2.5.so 00c57000 32 - - - r-x-- libnss_nis-2.5.so 00c8d000 36 - - - r-x-- libnss_files-2.5.so b7d6c000 2048 - - - r---- locale-archive bfd10000 84 - - - rw--- [ stack ] -------- ------- ------- ------- ------- total kB 4796 - - -

要显示进程映射的设备信息,请使用“pamp -d pid”。

11.Netstat

Netstat 命令显示各种网络相关信息,例如网络连接、路由表、接口统计信息、伪装连接、多播成员资格等,

以下是一些 netstat 命令示例。

使用 netstat -a 列出所有端口(监听和非监听),如下所示。

# netstat -a | more Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:30037 *:* LISTEN udp 0 0 *:bootpc *:* Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 6135 /tmp/.X11-unix/X0 unix 2 [ ACC ] STREAM LISTENING 5140 /var/run/acpid.socket

使用以下 netstat 命令找出程序在哪个端口上运行。

# netstat -ap | grep ssh (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 1 0 dev-db:ssh 101.174.100.22:39213 CLOSE_WAIT - tcp 1 0 dev-db:ssh 101.174.100.22:57643 CLOSE_WAIT -

使用以下 netstat 命令找出哪个进程正在使用特定端口。

# netstat -an | grep ':80'

12.IPTraf

IPTraf 是一个 IP 网络监控软件。以下是 IPTraf 的一些主要功能:

它是一个基于控制台(基于文本)的实用程序。

这将显示通过您的网络的 IP 流量。这将显示 TCP 标志、数据包和字节计数、ICMP、OSPF 数据包类型等。

显示扩展接口统计信息(包括 IP、TCP、UDP、ICMP、数据包大小和计数、校验和错误等)

LAN 模块自动发现主机并显示它们的活动

协议显示过滤器以查看选择性协议流量

高级日志记录功能

除了以太网接口,它还支持 FDDI、ISDN、SLIP、PPP 和环回

您还可以在全屏模式下运行该实用程序。这也有一个基于文本的菜单。

Linux 任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【云享新鲜】社区周刊·Vol.11-8个月挑战平台全自研,看华为云官网前端技术攻坚历程…
下一篇:振兴杯容器应用
相关文章