最佳 Linux 性能监控和调试工具

举报
Tiamo_T 发表于 2022/05/24 14:14:14 2022/05/24
【摘要】 当你在 Linux 环境下工作时它们会很有帮助,当然这份清单并不是很全面或不具权威性。

当你在 Linux 环境下工作时它们会很有帮助,当然这份清单并不是很全面或不具权威性。

1. 追踪

Strace 用于在 Linux 环境中对可执行文件的执行进行调试和故障排除。它显示进程使用的系统调用,以及进程接收到的信号。

Strace 监控特定程序的系统调用和信号。当您没有源代码并想调试程序的执行时,它会很有帮助。strace 为您提供二进制文件从头到尾的执行顺序。

使用选项 -e 跟踪可执行文件中的特定系统调用

默认情况下,strace 显示给定可执行文件的所有系统调用。以下示例显示了 Linux ls 命令的 strace 输出。

$ strace ls
execve("/bin/ls", ["ls"], [/* 21 vars */]) = 0
brk(0)                                  = 0x8c31000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb78c7000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=65354, ...}) = 0

要仅显示特定的系统调用,请使用 strace -e 选项,如下所示。

$ strace -e open ls
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib/libselinux.so.1", O_RDONLY)  = 3
open("/lib/librt.so.1", O_RDONLY)       = 3
open("/lib/libacl.so.1", O_RDONLY)      = 3
open("/lib/libc.so.6", O_RDONLY)        = 3
open("/lib/libdl.so.2", O_RDONLY)       = 3
open("/lib/libpthread.so.0", O_RDONLY)  = 3
open("/lib/libattr.so.1", O_RDONLY)     = 3
open("/proc/filesystems", O_RDONLY|O_LARGEFILE) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3


2. Lsof

lsof 代表 ls open files,会列出系统中所有打开的文件。打开的文件包括网络连接、设备和目录。lsof 命令的输出将包含以下列:

  • COMMAND 进程名称。
  • PID 进程号
  • USER 用户名
  • FD 文件描述符
  • TYPE 文件的节点类型
  • DEVICE 设备号
  • SIZE 文件大小
  • NODE节点号
  • NAME 文件名的完整路径。

要查看系统所有打开的文件,请执行不带任何参数的 lsof 命令,如下图所示。

# lsof | more
COMMAND     PID       USER   FD      TYPE     DEVICE      SIZE       NODE NAME
init          1       root  cwd       DIR        8,1      4096          2 /
init          1       root  rtd       DIR        8,1      4096          2 /
init          1       root  txt       REG        8,1     32684     983101 /sbin/init
init          1       root  mem       REG        8,1    106397     166798 /lib/ld-2.3.4.so
init          1       root  mem       REG        8,1   1454802     166799 /lib/tls/libc-2.3.4.so
init          1       root  mem       REG        8,1     53736     163964 /lib/libsepol.so.1
init          1       root  mem       REG        8,1     56328     166811 /lib/libselinux.so.1
init          1       root   10u     FIFO       0,13                  972 /dev/initctl
migration     2       root  cwd       DIR        8,1      4096          2 /
skipped..

要查看特定用户打开的文件,请使用 lsof -u 选项显示特定用户打开的所有文件。

# lsof -u ramesh
vi      7190 ramesh  txt    REG        8,1   474608   475196 /bin/vi
sshd    7163 ramesh    3u  IPv6   15088263               TCP dev-db:ssh->abc-12-12-12-12.

要列出特定文件的用户,请使用 lsof,如下所示。在本例中,它显示了当前正在使用 vi 的所有用户。

# lsof /bin/vi
COMMAND  PID  USER    FD   TYPE DEVICE   SIZE   NODE NAME
vi      7258  root   txt    REG    8,1 474608 475196 /bin/vi
vi      7300  ramesh txt    REG    8,1 474608 475196 /bin/vi

3. Ntop

Ntop 就像 top 一样,但用于网络流量。ntop 是一个显示网络使用情况的网络流量监视器。

您还可以从浏览器访问 ntop 以获取流量信息和网络状态。

以下是 ntop 的一些关键特性:

  • 显示按协议细分的网络流量
  • 根据几个标准对网络流量输出进行排序
  • 显示网络流量统计
  • 能够使用 RRD 存储网络流量统计信息
  • 识别用户的身份和主机操作系统
  • 能够分析和显示 IT 流量
  • 能够作为路由器和交换机的 NetFlow/sFlow 收集器工作
  • 显示类似于 RMON 的网络流量统计信息
  • 适用于 Linux、MacOS 和 Windows


4. GkrellM

GKrellM 代表 GNU Krell Monitors 或 GTK Krell Meters。它是基于 GTK+ 工具包的监控程序,用于监控各种系统资源。UI 是可抵押的。即,您可以在另一个之上添加任意数量的监控对象。就像任何其他基于桌面 UI 的监控工具一样,它可以监控 CPU、内存、文件系统、网络使用情况等。但是使用插件您可以监控外部应用程序。


5. w and uptime

在监控系统性能时,w 命令将帮助了解谁登录了系统。

$ w
09:35:06 up 21 days, 23:28,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM          LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0            24Oct11  21days 1:05   1:05 /usr/bin/Xorg :0 -nr -verbose
ramesh   pts/0    192.168.1.10  Mon14    0.00s  15.55s 0.26s sshd: localuser [priv]
john     pts/0    192.168.1.11  Mon07    0.00s  19.05s 0.20s sshd: localuser [priv]
jason    pts/0    192.168.1.12  Mon07    0.00s  21.15s 0.16s sshd: localuser [priv]

对于每个登录的用户,它会显示以下信息:

  • 用户名
  • tty信息
  • 远程主机 IP 地址
  • 用户登录时间
  • 用户闲置了多长时间
  • JCPU 和 PCUP
  • 用户正在执行的当前进程的命令

w 命令输出的第 1 行类似于 uptime 命令输出。它显示以下内容:

  • 当前时间
  • 系统已经启动并运行了多长时间
  • 当前登录系统的用户总数
  • 最后 1、5 和 15 分钟的平均负载

如果您只需要正常运行时间信息,请使用 uptime 命令。

$ uptime
 09:35:02 up 106 days, 28 min,  2 users,  load average: 0.08, 0.11, 0.05


6. /proc

/proc 是一个虚拟文件系统。例如,如果您执行 ls -l /proc/stat,您会注意到它的大小为 0 字节,但如果您执行“cat /proc/stat”,您会在文件中看到一些内容。

执行 ls -l /proc,你会看到很多只有数字的目录。这些数字代表进程 ID,此编号目录中的文件对应于具有该特定 PID 的进程。

以下是位于每个编号目录下的重要文件(对于每个进程):

  • cmdline – 命令的命令行。
  • environ - 环境变量。
  • fd - 包含链接到相应文件的文件描述符。
  • limits – 包含有关进程的特定限制的信息。
  • mounts – 挂载相关信息

以下是每个编号目录下的重要链接(针对每个进程):

  • cwd - 链接到进程的当前工作目录。
  • exe - 链接到进程的可执行文件。
  • root - 链接到进程的根目录。


7. KDE System Guard

这也称为 KSysGuard。在运行 KDE 的 Linux 桌面上,您可以使用此工具来监控系统资源。除了监控本地系统,它还可以监控远程系统。

如果您正在运行 KDE 桌面,请转到 Applications -> System -> System Monitor,这将启动 KSysGuard。您还可以从命令行键入 ksysguard 来启动它。

此工具显示以下两个选项卡:

  • 进程表 - 显示所有活动进程。您可以从这里对进程进行排序、终止或更改优先级
  • 系统负载 – 显示 CPU、内存和网络使用情况的图表。可以通过右键单击这些图表中的任何一个来自定义这些图表。

要连接到远程主机并对其进行监控,请单击文件菜单 -> 监控远程机器 -> 指定主机的 IP 地址、连接方式(例如 ssh)。这将询问您远程计算机上的用户名/密码。连接后,这将在 Process Table 和 System Load 选项卡中显示远程机器的系统使用情况。

8. GNOME System Monitor

在运行 GNOME 的 Linux 桌面上,您可以使用此工具从图形界面监视进程、系统资源和文件系统。除了监控,你还可以使用这个 UI 工具来杀死一个进程,改变一个进程的优先级。

如果您正在运行 GNOME 桌面,请转到系统 -> 管理 -> 系统监视器,这将启动 GNOME 系统监视器。您还可以从命令行键入 gnome-system-monitor 来启动它。

此工具具有以下四个选项卡:

  • System – 显示系统信息,包括 Linux 发行版本、系统资源和硬件信息。
  • 进程 - 显示所有活动进程,可根据各个字段进行排序
  • 资源 – 显示 CPU、内存和网络使用情况
  • 文件系统 - 显示有关当前安装的文件系统的信息


9. Conky

Conky 是一个系统监视器或 X。Conky 使用它所称的对象在 UI 中显示信息。默认情况下,conky 捆绑了 250 多个对象,显示各种监控信息(CPU、内存、网络、磁盘等)。它支持 IMAP、POP3、多种音频播放器。

您可以通过使用脚本创建自己的对象来监视和显示任何外部应用程序。监控信息可以多种格式显示:文本、图表、进度条等。此实用程序具有极强的可配置性。


10. Cacti

Cacti 是 RRDTool 的基于 PHP 的 UI 前端。Cacti 将生成图形所需的数据存储在 MySQL 数据库中。

以下是 Cacti 的一些高级特性:

  • 能够执行数据收集并将其存储在 MySQL 数据库(或循环存档)中
  • 提供了几个高级图形功能(GPRINT 图形项目分组、图形自动填充、使用 CDEF 数学函数操作图形数据、支持所有 RRDTool 图形项目)
  • 数据源可以为图收集本地或远程数据
  • 能够完全自定义循环存档 (RRA) 设置
  • 用户可以定义自定义脚本来收集数据
  • 用于数据收集的 SNMP 支持(php-snmp、ucd-snmp 或 net-snmp)
  • 内置轮询器有助于执行自定义脚本、获取 SNMP 数据、更新 RRD 文件等。
  • 高度灵活的图形模板功能
  • 用户友好且可自定义的图形显示选项
  • 创建具有各种权限集的不同用户来访问仙人掌前端
  • 可以为单个用户设置精细的权限级别

11. Vnstat

vnstat 是一个命令行实用程序,可显示和记录系统上接口的网络流量。这取决于内核提供的网络统计信息。因此,vnstat 不会为您的系统增加任何额外的负载来监控和记录网络流量。

不带任何参数的 vnstat 将为您提供包含以下信息的快速摘要:

  • 上次更新位于 /var/lib/vnstat/ 下的 vnStat 数据库时
  • 从它开始收集特定接口的统计信息开始
  • 过去两个月和过去两天的网络统计数据(传输的字节数、接收的字节数)。
# vnstat
Database updated: Sat Oct 15 11:54:00 2011

   eth0 since 10/01/11

          rx:  12.89 MiB      tx:  6.94 MiB      total:  19.82 MiB

   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       Sep '11     12.90 MiB |    6.90 MiB |   19.81 MiB |    0.14 kbit/s
       Oct '11     12.89 MiB |    6.94 MiB |   19.82 MiB |    0.15 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        29 MiB |      14 MiB |      43 MiB |

	 daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
     yesterday      4.30 MiB |    2.42 MiB |    6.72 MiB |    0.64 kbit/s
         today      2.03 MiB |    1.07 MiB |    3.10 MiB |    0.59 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated         4 MiB |       2 MiB |       6 MiB |

使用“vnstat -t”或“vnstat –top10”显示所有时间前 10 天的流量。

$ vnstat --top10

 eth0  /  top 10

    #      day          rx      |     tx      |    total    |   avg. rate
   -----------------------------+-------------+-------------+---------------
    1   10/12/11       4.30 MiB |    2.42 MiB |    6.72 MiB |    0.64 kbit/s
    2   10/11/11       4.07 MiB |    2.17 MiB |    6.24 MiB |    0.59 kbit/s
    3   10/10/11       2.48 MiB |    1.28 MiB |    3.76 MiB |    0.36 kbit/s
    ....
   -----------------------------+-------------+-------------+---------------


12. Htop

htop 是一个基于 ncurses 的进程查看器。这与 top 类似,但更灵活且用户友好。您可以使用鼠标与 htop 交互。您可以垂直滚动查看完整的进程列表,水平滚动查看进程的完整命令行。

htop 输出由三个部分组成:1) 页眉 2) 正文和 3) 页脚。

标题显示以下三个栏,以及一些重要的系统信息。您可以从 htop 设置菜单中更改其中的任何一个。

  • CPU 使用率:在栏的末尾显示文本中使用的百分比。栏本身将显示不同的颜色。蓝色为低优先级,绿色为正常,红色为内核。
  • 内存使用情况
  • 交换使用

正文显示按 %CPU 使用率排序的进程列表。使用箭头键、向上翻页、向下翻页键来调整进程。


13. Socket Statistics – SS

ss 代表套接字统计信息。这将显示类似于 netstat 命令的信息。

要显示所有侦听套接字,请执行 ss -l 如下所示。

$ ss -l
Recv-Q Send-Q   Local Address:Port     Peer Address:Port
0      100      :::8009                :::*
0      128      :::sunrpc              :::*
0      100      :::webcache            :::*
0      128      :::ssh                 :::*
0      64       :::nrpe                :::*

以下仅显示已建立的连接。

$ ss -o state established
Recv-Q Send-Q   Local Address:Port   Peer Address:Port
0      52       192.168.1.10:ssh   192.168.2.11:55969    timer:(on,414ms,0)

下面显示套接字摘要统计信息。这将显示按类型细分的套接字总数。

$ ss -s
Total: 688 (kernel 721)
TCP:   16 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 11

Transport Total     IP        IPv6
*         721       -         -
RAW       0         0         0
UDP       13        10        3
TCP       16        7         9
INET      29        17        12
FRAG      0         0         0
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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