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

举报
Tiamo_T 发表于 2022/05/24 10:26:33 2022/05/24
【摘要】 我编译了 12 个性能监控和调试工具,里面一定有适合您特定调试和监视场景的工具。

我编译了 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 正常工作。

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 和环回
  • 您还可以在全屏模式下运行该实用程序。这也有一个基于文本的菜单。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。