最佳 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
- 点赞
- 收藏
- 关注作者
评论(0)