2 系统监视实用程序 #
您可以使用许多程序、工具和实用程序来检查系统的状态。本章介绍其中的一部分及其最重要且最常用的参数。
supportconfig
收集和分析系统信息
除了下面介绍的实用程序外,SUSE Linux Enterprise Server 还包含 supportconfig
,此工具可创建有关系统的报告,例如:当前内核版本、硬件、已安装软件包、分区设置,等等。这些报告用于向 SUSE 支持人员提供创建支持票据时所需的信息。但是,还可根据这些报告分析已知问题,以帮助快速解决问题。为此,SUSE Linux Enterprise Server 提供了一个设备和一个命令行工具用于进行 Supportconfig 分析 (SCA)。有关详细信息,请参见第 47 章 “收集系统信息以供支持所用”。
对于所述的每条命令,将提供相关输出的示例。在示例中,第一行是命令本身(在 tux
> 或 root # 之后)。使用方括号 ([...]
) 表示省略,必要时对较长的行进行换行。较长的行的换行符由反斜线 (\
) 表示。
>
command -x -y
output line 1
output line 2
output line 3 is annoyingly long, so long that \
we need to break it
output line 4
[...]
output line 98
output line 99
我们尽量使说明简洁明了,以便包含尽可能多的实用程序。您可以在手册页中找到所有命令的更多信息。大多数命令还可识别参数 --help
,该参数可生成可能参数的简要列表。
2.1 多用途工具 #
大部分 Linux 系统监视工具只会监视系统的某个方面,不过,也有几个工具的使用范围更广。要了解概况并确定想要进一步检查系统的哪个部分,请先使用这些工具。
2.1.1 vmstat
#
vmstat 收集有关进程、内存、中断和 CPU 的信息:
vmstat [options] [delay [count]]
如果在不指定延迟和计数值的情况下调用此工具,它将显示自上次重引导以来的平均值。如果结合使用延迟值(以秒为单位)调用,它将显示给定时间段(以下示例中为两秒)的值。计数值指定 vmstat 应执行的更新次数。如果不指定此值,此工具将一直运行到手动停止。
vmstat
输出 #>
vmstat 2
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 44264 81520 424 935736 0 0 12 25 27 34 1 0 98 0 0
0 0 44264 81552 424 935736 0 0 0 0 38 25 0 0 100 0 0
0 0 44264 81520 424 935732 0 0 0 0 23 15 0 0 100 0 0
0 0 44264 81520 424 935732 0 0 0 0 36 24 0 0 100 0 0
0 0 44264 81552 424 935732 0 0 0 0 51 38 0 0 100 0 0
vmstat
输出 #>
vmstat 2
procs -----------memory----------- ---swap-- -----io---- -system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
32 1 26236 459640 110240 6312648 0 0 9944 2 4552 6597 95 5 0 0 0
23 1 26236 396728 110336 6136224 0 0 9588 0 4468 6273 94 6 0 0 0
35 0 26236 554920 110508 6166508 0 0 7684 27992 4474 4700 95 5 0 0 0
28 0 26236 518184 110516 6039996 0 0 10830 4 4446 4670 94 6 0 0 0
21 5 26236 716468 110684 6074872 0 0 8734 20534 4512 4061 96 4 0 0 0
vmstat 输出的第一行始终显示自上次重引导以来的平均值。
各列显示以下信息:
显示处于可运行状态的进程数。这些进程正在执行,或正在等待有可用的 CPU 槽。如果此列中的进程数目持续高于可用 CPU 数目,可能表示 CPU 算力不足。
显示正在等待除 CPU 以外资源的进程数。如果此列中的数字较大,可能表示出现了 I/O 问题(网络或磁盘)。
当前使用的交换空间量 (KB)。
未使用的内存量 (KB)。
最近未使用的可回收的内存。仅当结合使用参数
-a
(建议使用)调用vmstat
时,此列才可见。最近已使用的且正常情况下不会回收的内存。仅当结合使用参数
-a
(建议使用)调用vmstat
时,此列才可见。RAM 中包含文件系统元数据的文件缓冲区缓存 (KB)。结合使用参数
-a
调用vmstat
时,此列不可见。RAM 中包含实际文件内容的页缓存 (KB)。结合使用参数
-a
调用vmstat
时,此列不可见。每秒从交换空间移到 RAM (
si
) 或者从 RAM 移到交换空间 (so
) 的数据量 (KB)。如果在很长一段时间内so
值较大,可能表示应用程序正在泄漏内存,并且泄漏的内存正在换出。如果在很长一段时间内si
值较大,可能表示有很长时间处于非活动状态的应用程序现在恢复了活动状态。如果在很长一段时间内si
和so
值都较大,则证明存在交换震荡,并可能表示需要在系统中安装更多 RAM,因为没有足够的内存可以容纳工作集。每秒从块设备收到的块数(例如,磁盘读取)。请注意,交换也会影响此处显示的值。块大小根据文件系统而异,但可以使用 stat 实用程序来确定。如果需要吞吐量数据,则可使用 iostat。
每秒向块设备发送的块数(例如,磁盘写入)。请注意,交换也会影响此处显示的值。
每秒中断数。如果此值较大,可能表示 I/O 级别(网络和/或磁盘)较高,但也有可能是出于其他原因触发了此状态,例如,其他活动触发了处理器间中断。请务必同时检查
/proc/interrupts
以识别中断的来源。每秒环境切换次数。这是内核将内存中一个程序的可执行代码替换为另一程序的可执行代码的次数。
执行应用程序代码的 CPU 用量百分比。
执行内核代码的 CPU 用量百分比。
CPU 空闲时间百分比。如果在很长一段时间内此值为零,表示您的 CPU 正在满负荷工作。这不一定是糟糕的迹象 — 最好是参考
和 列中的值来确定您的计算机是否具备足够的 CPU 算力。如果“wa”时间不为零,表示由于正在等待 I/O 而损失了吞吐量。此问题可能不可避免,例如,如果发生首次读取某个文件而后台写回无法跟上读取进度等情况时。此外,还可能表示存在硬件瓶颈(网络或硬盘)。最后,这可能表示需要微调虚拟内存管理器(请参见第 14 章 “微调内存管理子系统”)。
从虚拟机挪用的 CPU 时间百分比。
有关更多选项,请参见 vmstat
--help
。
2.1.2 dstat
#
dstat
可以取代 vmstat
、iostat
、netstat
或 ifstat
等工具。dstat
实时显示有关系统资源的信息。例如,您可结合来自 IDE 控制器的中断数比较磁盘用量,或结合磁盘吞吐量(以相同的间隔)比较网络带宽。
默认情况下,其输出将显示在易于阅读的表格中。或者,可以生成 CSV(适合用作电子表格导入格式)输出。
dstat 是以 Python 编写的,可以通过插件来增强。
下面是一般语法:
dstat [-afv] [OPTIONS..] [DELAY [COUNT]]
所有选项和参数都是可选的。如果未指定任何参数,dstat 将显示有关 CPU(-c
、--cpu
)、磁盘(-d
、--disk
)、网络(-n
、--net
)、分页(-g
、--page
)以及系统的中断和环境切换(-y
、--sys
)的统计;它无休止地每秒刷新一次输出:
#
dstat
You did not select any stats, using -cdngy by default. ----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- usr sys idl wai hiq siq| read writ| recv send| in out | int csw 0 0 100 0 0 0| 15k 44k| 0 0 | 0 82B| 148 194 0 0 100 0 0 0| 0 0 |5430B 170B| 0 0 | 163 187 0 0 100 0 0 0| 0 0 |6363B 842B| 0 0 | 196 185
-a
,--all
等于
-cdngy
(默认值)-f
,--full
扩展
-C
、-D
、-I
、-N
和-S
发现列表-v
,--vmstat
等于
-pmgdsc
、-D total
- DELAY
每次更新的延迟秒数
- COUNT
在退出之前要显示的更新次数
默认延迟为 1,计数为未指定(无限制)。
有关详细信息,请参见 dstat
的手册页,其网址为 http://dag.wieers.com/home-made/dstat/。
2.1.3 系统活动信息:sar
#
sar
可以生成关于几乎所有重要系统活动的各种报告,其中包括 CPU、内存、IRQ 用量、I/O 和网络。它还可以实时生成报告。sar
命令从 /proc
文件系统收集数据。
sar
命令是 sysstat 软件包的一部分。请使用 YaST 或 zypper in sysstat
命令安装该软件包。sysstat.service
在默认情况下不会启动,必须使用以下命令来启用并启动它:
>
sudo
systemctl enable --now sysstat
2.1.3.1 使用 sar
生成报告 #
要实时生成报告,请调用 sar
并指定间隔(秒)和计数。要从文件生成报告,请使用选项 -f
指定文件名,而不要指定间隔和计数。如果未指定文件名、间隔和计数,sar
将尝试从 /var/log/sa/saDD
生成报告,其中 DD 表示当天。这是 sadc
(系统活动数据收集器)将其数据写入到的默认位置。使用多个 -f 选项查询多个文件。
sar 2 10 # real time report, 10 times every 2 seconds sar -f ~/reports/sar_2014_07_17 # queries file sar_2014_07_17 sar # queries file from today in /var/log/sa/ cd /var/log/sa && \ sar -f sa01 -f sa02 # queries files /var/log/sa/0[12]
下面提供了有用的 sar
调用示例及其解释。有关每列含义的详细信息,请参见 sar
的 man (1)
。
当 sysstat
服务停止时(例如,在重引导或关机期间),该工具仍会通过自动运行 /usr/lib64/sa/sa1 -S ALL 1 1
命令收集最后一分钟的统计。收集的二进制数据存储在系统活动数据文件中。
2.1.3.1.1 CPU 使用率报告:sar
#
如果不结合使用任何选项调用 sar
,它会显示有关 CPU 使用率的基本报告。在多处理器计算机上,将汇总所有 CPU 的结果。使用选项 -P ALL
还可查看各个 CPU 的统计。
#
sar 10 5
Linux 4.4.21-64-default (jupiter) 10/12/16 _x86_64_ (2 CPU)
17:51:29 CPU %user %nice %system %iowait %steal %idle
17:51:39 all 57,93 0,00 9,58 1,01 0,00 31,47
17:51:49 all 32,71 0,00 3,79 0,05 0,00 63,45
17:51:59 all 47,23 0,00 3,66 0,00 0,00 49,11
17:52:09 all 53,33 0,00 4,88 0,05 0,00 41,74
17:52:19 all 56,98 0,00 5,65 0,10 0,00 37,27
Average: all 49,62 0,00 5,51 0,24 0,00 44,62
显示 CPU 在等待 I/O 请求时处于空闲状态的时间百分比。如果在较长一段时间内此值远远大于零,则表示 I/O 系统(网络或硬盘)存在瓶颈。如果在较长一段时间内 值为零,则表示您的 CPU 正在以全容量工作。
2.1.3.1.2 内存使用率报告:sar
-r
#
使用选项 -r
生成系统内存 (RAM) 的总体情况说明。
#
sar -r 10 5
Linux 4.4.21-64-default (jupiter) 10/12/16 _x86_64_ (2 CPU)
17:55:27 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
17:55:37 104232 1834624 94.62 20 627340 2677656 66.24 802052 828024 1744
17:55:47 98584 1840272 94.92 20 624536 2693936 66.65 808872 826932 2012
17:55:57 87088 1851768 95.51 20 605288 2706392 66.95 827260 821304 1588
17:56:07 86268 1852588 95.55 20 599240 2739224 67.77 829764 820888 3036
17:56:17 104260 1834596 94.62 20 599864 2730688 67.56 811284 821584 3164
Average: 96086 1842770 95.04 20 611254 2709579 67.03 815846 823746 2309
和 列显示当前工作负载可能需要的最大内存量(RAM 和交换空间)的近似值。 显示以 KB 为单位的绝对数字, 则显示百分比。
2.1.3.1.3 分页统计报告:sar
-B
#
使用选项 -B
可显示内核分页统计。
#
sar -B 10 5
Linux 4.4.21-64-default (jupiter) 10/12/16 _x86_64_ (2 CPU)
18:23:01 pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
18:23:11 366.80 11.60 542.50 1.10 4354.80 0.00 0.00 0.00 0.00
18:23:21 0.00 333.30 1522.40 0.00 18132.40 0.00 0.00 0.00 0.00
18:23:31 47.20 127.40 1048.30 0.10 11887.30 0.00 0.00 0.00 0.00
18:23:41 46.40 2.50 336.10 0.10 7945.00 0.00 0.00 0.00 0.00
18:23:51 0.00 583.70 2037.20 0.00 17731.90 0.00 0.00 0.00 0.00
Average: 92.08 211.70 1097.30 0.26 12010.28 0.00 0.00 0.00 0.00
(每秒重大错误数)列显示已将多少页从磁盘装载到内存中。错误可能因文件访问或错误导致。有时出现许多重大错误是正常的。例如,在应用程序启动期间就可能会出现这种情况。如果在应用程序的整个有效期内都出现重大错误,可能表示主内存不足,尤其是同时还要执行大量的直接扫描 (pgscand/s) 时。
列显示扫描的页数 ( ),相对于从主内存缓存或交换缓存 ( ) 中重复使用的页数。此值用于测量页回收的效率。正常值接近 100(正在重复使用已换出的每个非活动页)或 0(未扫描任何页)。该值不应降到 30 以下。
2.1.3.1.4 块设备统计报告:sar
-d
#
使用选项 -d
可显示块设备(硬盘、光盘驱动器、USB 存储设备等)。请务必使用附加选项 -p
(美观打印)来使 列更易于阅读。
#
sar -d -p 10 5
Linux 4.4.21-64-default (jupiter) 10/12/16 _x86_64_ (2 CPU)
18:46:09 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:46:19 sda 1.70 33.60 0.00 19.76 0.00 0.47 0.47 0.08
18:46:19 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18:46:19 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:46:29 sda 8.60 114.40 518.10 73.55 0.06 7.12 0.93 0.80
18:46:29 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18:46:29 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:46:39 sda 40.50 3800.80 454.90 105.08 0.36 8.86 0.69 2.80
18:46:39 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18:46:39 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:46:49 sda 1.40 0.00 204.90 146.36 0.00 0.29 0.29 0.04
18:46:49 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18:46:49 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
18:46:59 sda 3.30 0.00 503.80 152.67 0.03 8.12 1.70 0.56
18:46:59 sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 11.10 789.76 336.34 101.45 0.09 8.07 0.77 0.86
Average: sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
比较所有磁盘的
、 和 的 值。如果 和 列中的值一直较大,可能表示 I/O 子系统成为瓶颈。如果计算机使用多个磁盘,则最好是以交错方式在等速、等容量的磁盘之间均匀分布 I/O。需要考虑到存储系统是否有多层。此外,如果有多个存储路径,请在平衡存储空间的使用方式时,考虑链接饱和度应为多少。
2.1.3.1.5 网络统计报告:sar
-n KEYWORD
#
选项 -n
可让您生成多份网络相关报告。与 -n
一起指定以下关键字之一:
DEV:生成所有网络设备的统计报告
EDEV:生成所有网络设备的错误统计报告
NFS:生成 NFS 客户端的统计报告
NFSD:生成 NFS 服务器的统计报告
SOCK:生成有关套接字的统计报告
ALL:生成所有网络统计报告
2.1.3.2 可视化 sar
数据 #
sar
报告不一定总能让用户轻松分析。使用能将 sar
数据可视化的 Java 应用程序 kSar,创建易于阅读的图表。它甚至还可以生成 PDF 报告。kSar 可接受实时生成的数据以及文件中的既往数据。kSar 通过 BSD 许可证授权,可从 https://sourceforge.net/projects/ksar/ 获取。
2.2 系统信息 #
2.2.1 设备负载信息:iostat
#
要监视系统设备负载,请使用 iostat
。此工具生成的报告可用于在挂接到系统的物理磁盘之间更好地进行负载平衡。
要使用 iostat
,请安装软件包 sysstat。
第一份 iostat
报告显示自引导系统以来收集的统计信息。后续报告则涵盖上一份报告之后的时间。
>
iostat
Linux 4.4.21-64-default (jupiter) 10/12/16 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
17.68 4.49 4.24 0.29 0.00 73.31
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sdb 2.02 36.74 45.73 3544894 4412392
sda 1.05 5.12 13.47 493753 1300276
sdc 0.02 0.14 0.00 13641 37
以这种方式调用 iostat
可帮助您确定吞吐量是否与预期不符,但不会解释原因。通过调用 iostat
-x
生成的扩展报告可以更好地解答此类问题。例如,扩展报告中额外包含有关平均队列大小和平均等待时间的信息。如果使用 -z
开关排除空闲块设备,还可以更轻松地评估数据。在 iostat
的手册页 (man 1 iostat
) 中可以找到显示的每个列标题的定义。
您还可以指定应按指定的间隔监视的特定设备。例如,要按三秒间隔为设备 sda
生成五份报告,请使用:
>
iostat
-p sda 3 5
要显示网络文件系统 (NFS) 的统计,可以使用下列两个类似的实用程序:
nfsiostat-sysstat
已随附于软件包 sysstat 中。nfsiostat
已随附于软件包 nfs-client 中。
2.2.2 处理器活动监视:mpstat
#
实用程序 mpstat
检查每个可用处理器的活动。如果您的系统仅有一个处理器,将报告全局平均统计。
计时参数的工作方式与 iostat
命令相同。输入 mpstat 2
5
会以两秒间隔列显所有处理器的五份报告。
#
mpstat 2 5
Linux 4.4.21-64-default (jupiter) 10/12/16 _x86_64_ (2 CPU)
13:51:10 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13:51:12 all 8,27 0,00 0,50 0,00 0,00 0,00 0,00 0,00 0,00 91,23
13:51:14 all 46,62 0,00 3,01 0,00 0,00 0,25 0,00 0,00 0,00 50,13
13:51:16 all 54,71 0,00 3,82 0,00 0,00 0,51 0,00 0,00 0,00 40,97
13:51:18 all 78,77 0,00 5,12 0,00 0,00 0,77 0,00 0,00 0,00 15,35
13:51:20 all 51,65 0,00 4,30 0,00 0,00 0,51 0,00 0,00 0,00 43,54
Average: all 47,85 0,00 3,34 0,00 0,00 0,40 0,00 0,00 0,00 48,41
从 mpstat
数据中可以看到:
即使在系统负载总体较轻的情况下,是否仍有一部分 CPU 几乎被完全使用。少量热点 CPU 可能表示工作负载未并行化,在处理器更少但更快的计算机上执行可能更有利。
2.2.3 处理器频率监视:turbostat
#
turbostat
显示 AMD64/Intel 64 处理器的频率、负载、温度和算力。此工具能够以两种模式运行:如果使用某个命令调用,将派生命令进程,命令完成时将显示统计。如果不使用命令运行,它将每隔五秒显示更新的统计。请注意,turbostat
要求装载内核模块 msr
。
>
sudo
turbostat find /etc -type d -exec true {} \; 0.546880 sec CPU Avg_MHz Busy% Bzy_MHz TSC_MHz - 416 28.43 1465 3215 0 631 37.29 1691 3215 1 416 27.14 1534 3215 2 270 24.30 1113 3215 3 406 26.57 1530 3214 4 505 32.46 1556 3214 5 270 22.79 1184 3214
输出取决于 CPU 类型,可能有所不同。要显示温度和算力等更多细节,请使用 --debug
选项。有关更多命令行选项以及字段说明的解释,请参见 man 8 turbostat
。
2.2.4 任务监视:pidstat
#
如果您需要查看特定任务对您系统施加的负载,请使用 pidstat
命令。此命令会列显每个选定任务的活动,或列显 Linux 内核管理的所有任务的活动(如果未指定任务)。您还可以设置要显示的报告数,以及时间间隔。
例如,pidstat
-C
firefox 2 3 会列显命令名称包含字符串“firefox”的任务的负载统计。将每隔两秒列显三份报告。
#
pidstat -C firefox 2 3
Linux 4.4.21-64-default (jupiter) 10/12/16 _x86_64_ (2 CPU)
14:09:11 UID PID %usr %system %guest %CPU CPU Command
14:09:13 1000 387 22,77 0,99 0,00 23,76 1 firefox
14:09:13 UID PID %usr %system %guest %CPU CPU Command
14:09:15 1000 387 46,50 3,00 0,00 49,50 1 firefox
14:09:15 UID PID %usr %system %guest %CPU CPU Command
14:09:17 1000 387 60,50 7,00 0,00 67,50 1 firefox
Average: UID PID %usr %system %guest %CPU CPU Command
Average: 1000 387 43,19 3,65 0,00 46,84 - firefox
类似地,可以使用 pidstat
-d
来评估任务正在执行多少 I/O、任务在执行这些 I/O 时是否处于休眠状态,以及任务停滞的时钟滴答次数。
2.2.5 内核环形缓冲区:dmesg
#
Linux 内核在环形缓冲区中保存某些消息。要查看这些消息,请输入命令 dmesg -T
。
较旧事件将记录在 systemd
日志中。有关日志的详细信息,请参见第 21 章 “journalctl
:查询 systemd
日志”。
2.2.6 打开的文件的列表:lsof
#
要查看为具有进程 ID PID 的进程打开的所有文件的列表,请使用 -p
。例如,要查看当前 shell 使用的所有文件,请输入:
#
lsof -p $$
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 8842 root cwd DIR 0,32 222 6772 /root
bash 8842 root rtd DIR 0,32 166 256 /
bash 8842 root txt REG 0,32 656584 31066 /bin/bash
bash 8842 root mem REG 0,32 1978832 22993 /lib64/libc-2.19.so
[...]
bash 8842 root 2u CHR 136,2 0t0 5 /dev/pts/2
bash 8842 root 255u CHR 136,2 0t0 5 /dev/pts/2
使用了特殊外壳变量 $$
,它的值是外壳的进程 ID。
与 -i
结合使用时,lsof
还会列出当前打开的互联网文件:
#
lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
wickedd-d 917 root 8u IPv4 16627 0t0 UDP *:bootpc
wickedd-d 918 root 8u IPv6 20752 0t0 UDP [fe80::5054:ff:fe72:5ead]:dhcpv6-client
sshd 3152 root 3u IPv4 18618 0t0 TCP *:ssh (LISTEN)
sshd 3152 root 4u IPv6 18620 0t0 TCP *:ssh (LISTEN)
master 4746 root 13u IPv4 20588 0t0 TCP localhost:smtp (LISTEN)
master 4746 root 14u IPv6 20589 0t0 TCP localhost:smtp (LISTEN)
sshd 8837 root 5u IPv4 293709 0t0 TCP jupiter.suse.de:ssh->venus.suse.de:33619 (ESTABLISHED)
sshd 8837 root 9u IPv6 294830 0t0 TCP localhost:x11 (LISTEN)
sshd 8837 root 10u IPv4 294831 0t0 TCP localhost:x11 (LISTEN)
2.2.7 内核和 udev 事件序列查看器:udevadm monitor
#
udevadm monitor
监听内核 uevent 以及 udev 规则发出的事件,并将事件的设备路径 (DEVPATH) 列显到控制台。当连接 USB 记忆棒时会出现一系列事件:
只允许 root 用户通过运行 udevadm
命令监视 udev 事件。
UEVENT[1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2 UEVENT[1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2 UEVENT[1138806687] add@/class/scsi_host/host4 UEVENT[1138806687] add@/class/usb_device/usbdev4.10 UDEV [1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2 UDEV [1138806687] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2 UDEV [1138806687] add@/class/scsi_host/host4 UDEV [1138806687] add@/class/usb_device/usbdev4.10 UEVENT[1138806692] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2 UEVENT[1138806692] add@/block/sdb UEVENT[1138806692] add@/class/scsi_generic/sg1 UEVENT[1138806692] add@/class/scsi_device/4:0:0:0 UDEV [1138806693] add@/devices/pci0000:00/0000:00:1d.7/usb4/4-2/4-2.2/4-2.2 UDEV [1138806693] add@/class/scsi_generic/sg1 UDEV [1138806693] add@/class/scsi_device/4:0:0:0 UDEV [1138806693] add@/block/sdb UEVENT[1138806694] add@/block/sdb/sdb1 UDEV [1138806694] add@/block/sdb/sdb1 UEVENT[1138806694] mount@/block/sdb/sdb1 UEVENT[1138806697] umount@/block/sdb/sdb1
2.3 流程 #
2.3.1 进程间通讯:ipcs
#
命令 ipcs
生成当前正在使用的 IPC 资源的列表:
#
ipcs
------ Message Queues --------
key msqid owner perms used-bytes messages
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 65536 tux 600 524288 2 dest
0x00000000 98305 tux 600 4194304 2 dest
0x00000000 884738 root 600 524288 2 dest
0x00000000 786435 tux 600 4194304 2 dest
0x00000000 12058628 tux 600 524288 2 dest
0x00000000 917509 root 600 524288 2 dest
0x00000000 12353542 tux 600 196608 2 dest
0x00000000 12451847 tux 600 524288 2 dest
0x00000000 11567114 root 600 262144 1 dest
0x00000000 10911763 tux 600 2097152 2 dest
0x00000000 11665429 root 600 2336768 2 dest
0x00000000 11698198 root 600 196608 2 dest
0x00000000 11730967 root 600 524288 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
0xa12e0919 32768 tux 666 2
2.3.2 进程列表:ps
#
命令 ps
生成进程的列表。书写大多数参数时一定不能带减号。请参见 ps
--help
获取简要帮助,或者参见手册页获取详细帮助。
要列出所有进程以及用户和命令行信息,请使用 ps axu
:
>
ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 34376 4608 ? Ss Jul24 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S Jul24 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jul24 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Jul24 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S Jul24 0:00 [kworker/u2:0]
root 7 0.0 0.0 0 0 ? S Jul24 0:00 [migration/0]
[...]
tux 12583 0.0 0.1 185980 2720 ? Sl 10:12 0:00 /usr/lib/gvfs/gvfs-mtp-volume-monitor
tux 12587 0.0 0.1 198132 3044 ? Sl 10:12 0:00 /usr/lib/gvfs/gvfs-gphoto2-volume-monitor
tux 12591 0.0 0.1 181940 2700 ? Sl 10:12 0:00 /usr/lib/gvfs/gvfs-goa-volume-monitor
tux 12594 8.1 10.6 1418216 163564 ? Sl 10:12 0:03 /usr/bin/gnome-shell
tux 12600 0.0 0.3 393448 5972 ? Sl 10:12 0:00 /usr/lib/gnome-settings-daemon-3.0/gsd-printer
tux 12625 0.0 0.6 227776 10112 ? Sl 10:12 0:00 /usr/lib/gnome-control-center-search-provider
tux 12626 0.5 1.5 890972 23540 ? Sl 10:12 0:00 /usr/bin/nautilus --no-default-window
[...]
要检查有多少个 sshd
进程正在运行,请将选项 -p
与命令 pidof
一起使用,这会列出给定进程的进程 ID。
>
ps -p $(pidof sshd)
PID TTY STAT TIME COMMAND
1545 ? Ss 0:00 /usr/sbin/sshd -D
4608 ? Ss 0:00 sshd: root@pts/0
可以根据需要设置进程列表的格式。选项 L
返回所有关键字的列表。输入以下命令可以生成所有进程按内存使用量排序的列表:
>
ps ax --format pid,rss,cmd --sort rss
PID RSS CMD
PID RSS CMD
2 0 [kthreadd]
3 0 [ksoftirqd/0]
4 0 [kworker/0:0]
5 0 [kworker/0:0H]
6 0 [kworker/u2:0]
7 0 [migration/0]
8 0 [rcu_bh]
[...]
12518 22996 /usr/lib/gnome-settings-daemon-3.0/gnome-settings-daemon
12626 23540 /usr/bin/nautilus --no-default-window
12305 32188 /usr/bin/Xorg :0 -background none -verbose
12594 164900 /usr/bin/gnome-shell
ps
调用 #ps aux
--sort COLUMN
按 COLUMN 对输出进行排序。请将 COLUMN 替换为
pmem
(表示物理内存比率)pcpu
(表示 CPU 比率)rss
(表示常驻集大小,即不交换的物理内存)ps axo pid,%cpu,rss,vsz,args,wchan
显示每个进程、其 PID、CPU 用量、内存大小(常驻和虚拟)、名称及其系统调用。
ps axfo pid,args
显示进程树。
2.3.3 进程树:pstree
#
命令 pstree
生成树状进程列表:
>
pstree
systemd---accounts-daemon---{gdbus}
| |-{gmain}
|-at-spi-bus-laun---dbus-daemon
| |-{dconf worker}
| |-{gdbus}
| |-{gmain}
|-at-spi2-registr---{gdbus}
|-cron
|-2*[dbus-daemon]
|-dbus-launch
|-dconf-service---{gdbus}
| |-{gmain}
|-gconfd-2
|-gdm---gdm-simple-slav---Xorg
| | |-gdm-session-wor---gnome-session---gnome-setti+
| | | | |-gnome-shell+++
| | | | |-{dconf work+
| | | | |-{gdbus}
| | | | |-{gmain}
| | | |-{gdbus}
| | | |-{gmain}
| | |-{gdbus}
| | |-{gmain}
| |-{gdbus}
| |-{gmain}
[...]
参数 -p
将进程 ID 添加到给定的名称。要让命令行也显示出来,请使用 -a
参数:
2.3.4 进程表:top
#
命令 top
(“table of processes”(进程表)的英文缩写)显示每隔两秒刷新的进程列表。要终止程序,请按 Q 键。参数 -n 1
在显示一次进程列表后终止程序。下面是 top -n 1
命令的示例输出:
>
top -n 1
Tasks: 128 total, 1 running, 127 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.4 us, 1.2 sy, 0.0 ni, 96.3 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 1535508 total, 699948 used, 835560 free, 880 buffers
KiB Swap: 1541116 total, 0 used, 1541116 free. 377000 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 116292 4660 2028 S 0.000 0.303 0:04.45 systemd
2 root 20 0 0 0 0 S 0.000 0.000 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.000 0.000 0:00.07 ksoftirqd+
5 root 0 -20 0 0 0 S 0.000 0.000 0:00.00 kworker/0+
6 root 20 0 0 0 0 S 0.000 0.000 0:00.00 kworker/u+
7 root rt 0 0 0 0 S 0.000 0.000 0:00.00 migration+
8 root 20 0 0 0 0 S 0.000 0.000 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.000 0.000 0:00.24 rcu_sched
10 root rt 0 0 0 0 S 0.000 0.000 0:00.01 watchdog/0
11 root 0 -20 0 0 0 S 0.000 0.000 0:00.00 khelper
12 root 20 0 0 0 0 S 0.000 0.000 0:00.00 kdevtmpfs
13 root 0 -20 0 0 0 S 0.000 0.000 0:00.00 netns
14 root 0 -20 0 0 0 S 0.000 0.000 0:00.00 writeback
15 root 0 -20 0 0 0 S 0.000 0.000 0:00.00 kintegrit+
16 root 0 -20 0 0 0 S 0.000 0.000 0:00.00 bioset
17 root 0 -20 0 0 0 S 0.000 0.000 0:00.00 crypto
18 root 0 -20 0 0 0 S 0.000 0.000 0:00.00 kblockd
默认情况下,输出将按 CPU 用量(列 Shift–P)排序。使用以下组合键可以更改排序字段:
,快捷方式为Shift–M:常驻内存 ( ) |
Shift–N:进程 ID ( ) |
Shift–T:时间 ( ) |
要使用任何其他字段进行排序,请按 F 并从列表中选择一个字段。要切换排序顺序,请使用 Shift–R。
参数 -U UID
只监视与特定用户关联的进程。请将 UID 替换为用户的用户 ID。使用 top -U $(id -u)
显示当前用户的进程
2.3.5 IBM Z 超级管理程序监视器:hyptop
#
hyptop
通过 debugfs 使用内核基础架构来提供 IBM Z 超级管理程序环境的动态实时视图。它适用于 z/VM 或 LPAR 超级管理程序。例如,它可以根据可用的数据,显示活动 LPAR 或 z/VM Guest 的 CPU 与内存消耗量。它提供类似于 top
命令的基于 curses 的用户界面。hyptop
提供两个窗口:
您可以在交互模式(默认)下或使用 -b
选项在批模式下运行 hyptop
。在交互模式下,可以按 ? (在启动 hyptop
后)获取帮助。
LPAR 下的
窗口输出:12:30:48 | CPU-T: IFL(18) CP(3) UN(3) ?=help system #cpu cpu mgm Cpu+ Mgm+ online (str) (#) (%) (%) (hm) (hm) (dhm) H05LP30 10 461.14 10.18 1547:41 8:15 11:05:59 H05LP33 4 133.73 7.57 220:53 6:12 11:05:54 H05LP50 4 99.26 0.01 146:24 0:12 10:04:24 H05LP02 1 99.09 0.00 269:57 0:00 11:05:58 TRX2CFA 1 2.14 0.03 3:24 0:04 11:06:01 H05LP13 6 1.36 0.34 4:23 0:54 11:05:56 TRX1 19 1.22 0.14 13:57 0:22 11:06:01 TRX2 20 1.16 0.11 26:05 0:25 11:06:00 H05LP55 2 0.00 0.00 0:22 0:00 11:05:52 H05LP56 3 0.00 0.00 0:00 0:00 11:05:52 413 823.39 23.86 3159:57 38:08 11:06:01
z/VM 下的“sys_list”窗口输出:
12:32:21 | CPU-T: UN(16) ?=help system #cpu cpu Cpu+ online memuse memmax wcur (str) (#) (%) (hm) (dhm) (GiB) (GiB) (#) T6360004 6 100.31 959:47 53:05:20 1.56 2.00 100 T6360005 2 0.44 1:11 3:02:26 0.42 0.50 100 T6360014 2 0.27 0:45 10:18:41 0.54 0.75 100 DTCVSW1 1 0.00 0:00 53:16:42 0.01 0.03 100 T6360002 6 0.00 166:26 40:19:18 1.87 2.00 100 OPERATOR 1 0.00 0:00 53:16:42 0.00 0.03 100 T6360008 2 0.00 0:37 30:22:55 0.32 0.75 100 T6360003 6 0.00 3700:57 53:03:09 4.00 4.00 100 NSLCF1 1 0.00 0:02 53:16:41 0.03 0.25 500 EREP 1 0.00 0:00 53:16:42 0.00 0.03 100 PERFSVM 1 0.00 0:53 2:21:12 0.04 0.06 0 TCPIP 1 0.00 0:01 53:16:42 0.01 0.12 3000 DATAMOVE 1 0.00 0:05 53:16:42 0.00 0.03 100 DIRMAINT 1 0.00 0:04 53:16:42 0.01 0.03 100 DTCVSW2 1 0.00 0:00 53:16:42 0.01 0.03 100 RACFVM 1 0.00 0:00 53:16:42 0.01 0.02 100 75 101.57 5239:47 53:16:42 15.46 22.50 3000
LPAR 下的
窗口输出:14:08:41 | H05LP30 | CPU-T: IFL(18) CP(3) UN(3) ? = help cpuid type cpu mgm visual. (#) (str) (%) (%) (vis) 0 IFL 96.91 1.96 |############################################ | 1 IFL 81.82 1.46 |##################################### | 2 IFL 88.00 2.43 |######################################## | 3 IFL 92.27 1.29 |########################################## | 4 IFL 83.32 1.05 |##################################### | 5 IFL 92.46 2.59 |########################################## | 6 IFL 0.00 0.00 | | 7 IFL 0.00 0.00 | | 8 IFL 0.00 0.00 | | 9 IFL 0.00 0.00 | | 534.79 10.78
z/VM 下的
窗口输出:15:46:57 | T6360003 | CPU-T: UN(16) ? = help cpuid cpu visual (#) (%) (vis) 0 548.72 |######################################### | 548.72
2.3.6 顶层式 I/O 监视器:iotop
#
iotop
实用程序按进程或线程显示 I/O 使用情况表。
iotop
默认未安装 iotop
。您需要以 root
身份使用 zypper in iotop
手动安装它。
iotop
显示采样期间每个进程读取和写入的 I/O 带宽的列。它还显示该进程在换入时以及等待 I/O 时所花费时间的百分比。将显示每个进程的 I/O 优先级(类/级别)。此外,还会在界面顶部显示采样期间读取和写入的总 I/O 带宽。
使用 ← 和 → 键可更改排序。
使用 R 键可反转排序顺序。
使用 O 键可在显示所有进程和线程(默认视图)和仅显示执行 I/O 的进程和线程之间切换。(此功能类似于在命令行上添加
--only
。)使用 P 键可在显示线程(默认视图)和显示进程之间切换。(此功能类似于
--only
。)使用 A 键可在显示当前 I/O 带宽(默认视图)和显示自启动
iotop
以来的累计 I/O 操作数目之间切换。(此功能类似于--accumulated
。)使用 I 键可更改某个线程或者某个进程的线程的优先级。
按 Q 键会退出
iotop
。按任何其他键会强制刷新。
下面是当 find
和 emacs
正在运行时命令 iotop
--only
的示例输出:
#
iotop --only
Total DISK READ: 50.61 K/s | Total DISK WRITE: 11.68 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
3416 be/4 tux 50.61 K/s 0.00 B/s 0.00 % 4.05 % find /
275 be/3 root 0.00 B/s 3.89 K/s 0.00 % 2.34 % [jbd2/sda2-8]
5055 be/4 tux 0.00 B/s 3.89 K/s 0.00 % 0.04 % emacs
还可以在批模式 (-b
) 下使用 iotop
,其输出将存储在文件中以供日后分析。有关完整的选项集,请参见手册页 (man 8 iotop
)。
2.3.7 修改进程的资源优先级:nice
和 renice
#
内核按照进程的 nice 级别(也称为资源优先级)决定哪些进程需要的 CPU 时间比其他进程更多。进程的 “nice” 级别越高,它获取的 CPU 时间较之其他进程就越少。Nice 级别的范围从 -20(最低 “nice” 级别)到 19。负值只能由 root
用户设置。
当运行持续时间较长并使用大量 CPU 时间的非时间关键型进程时,调整资源优先级会很有用。例如,在同时执行其他任务的系统上编译内核时。将此类进程的 “nice” 级别调高可确保其他任务(例如 Web 服务器)获得更高的优先级。
调用不带任何参数的 nice
会列显当前资源优先级:
>
nice
0
运行 nice
COMMAND 会将给定命令的当前 nice 级别加 10。使用 nice
-n
LEVEL
COMMAND 可以指定相对于当前级别的新资源优先级。
要更改正在运行的进程的资源优先级,请使用 renice
PRIORITY -p
PROCESS_ID
,例如:
>
renice +5 3266
要重新设置特定用户拥有的所有进程的资源优先级,请使用选项 -u USER
。
使用选项 -g PROCESS_GROUP_ID
可重新设置进程组的资源优先级。
2.4 内存 #
2.4.1 内存用量:free
#
实用程序 free
检查 RAM 和交换空间用量。将显示有关可用内存和已使用内存以及交换区域的详细信息:
>
free
total used free shared buffers cached
Mem: 32900500 32703448 197052 0 255668 5787364
-/+ buffers/cache: 26660416 6240084
Swap: 2046972 304680 1742292
选项 -b
、-k
、-m
、-g
分别以字节、KB、MB 或 GB 为单位显示输出。参数 -s delay
确保显示内容每隔 DELAY 秒刷新。例如,free -s 1.5
每隔 1.5 秒生成更新内容。
2.4.2 内存使用详情:/proc/meminfo
#
相比 free
,使用 /proc/meminfo
可以获取有关内存使用情况的更详细信息。实际上,free
只是使用了此文件中的某些数据。下面是在 64 位系统上的示例输出。请注意,由于内存管理不同,在 32 位系统上的输出略有不同:
MemTotal: 1942636 kB MemFree: 1294352 kB MemAvailable: 1458744 kB Buffers: 876 kB Cached: 278476 kB SwapCached: 0 kB Active: 368328 kB Inactive: 199368 kB Active(anon): 288968 kB Inactive(anon): 10568 kB Active(file): 79360 kB Inactive(file): 188800 kB Unevictable: 80 kB Mlocked: 80 kB SwapTotal: 2103292 kB SwapFree: 2103292 kB Dirty: 44 kB Writeback: 0 kB AnonPages: 288592 kB Mapped: 70444 kB Shmem: 11192 kB Slab: 40916 kB SReclaimable: 17712 kB SUnreclaim: 23204 kB KernelStack: 2000 kB PageTables: 10996 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 3074608 kB Committed_AS: 1407208 kB VmallocTotal: 34359738367 kB VmallocUsed: 145996 kB VmallocChunk: 34359588844 kB HardwareCorrupted: 0 kB AnonHugePages: 86016 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 79744 kB DirectMap2M: 2017280 kB
这些项的含义如下:
RAM 总量。
未使用的 RAM 量。
在不交换的情况下可用于启动新应用程序的预计内存量。
RAM 中包含文件系统元数据的文件缓冲区缓存。
RAM 中的页缓存。这不包括缓冲区缓存和交换缓存,但包括
内存。换出内存的页缓存。
- 、 、
最近使用的内存,除非必要或明确请求,否则不会回收。
是 与 之和。- 、 、
最近用得较少的内存,通常会最先回收。
是 与 之和。无法回收的内存量(例如,由于它是
或用作 RAM 磁盘)。由
mlock
系统调用提供支持的内存量。mlock
允许进程定义要将其虚拟内存映射到物理 RAM 的哪个部分。但是,mlock
不保证实现这种定位。交换空间量。
未使用的交换空间量。
由于包含更改而正在等待写入磁盘的内存量(相较于后备存储空间)。未写入数据可在短暂延迟后由应用程序或内核进行显式同步。将大量未写入数据写入磁盘可能需要花费大量时间,从而导致停滞。可使用
sysctl
参数vm.dirty_ratio
或vm.dirty_bytes
来控制可在任意时间存在的未写入数据总量(有关更多细节,请参见第 14.1.5 节 “写回”)。当前正在写入磁盘的内存量。
使用
mmap
系统调用声明的内存。在进程组之间共享的内存,例如 IPC 数据、
tmpfs
数据和共享的匿名内存。内核内部数据结构的内存分配。
可回收的 Slab 部分,例如缓存(inode、dentry 等)。
不可回收的 Slab 部分。
应用程序(通过系统调用)使用的内核空间内存量。
专用于所有进程的页表的内存量。
已发送到服务器,但尚未在服务器中提交的 NFS 页。
块设备的回弹缓冲区使用的内存。
临时写回缓冲区的 FUSE 使用的内存。
根据过量使用率设置提供给系统的内存量。仅当启用了严格的过量使用统计时,才会强制此限制。
当前工作负载在最坏情况下需要的内存总量(RAM 和交换空间)近似值。
分配的内核虚拟地址空间量。
已使用的内核虚拟地址空间量。
可用内核虚拟地址空间的最大连续块。
有故障的内存量(仅当使用 ECC RAM 时才可检测到)。
映射到用户空间页表的匿名大页。这些页是在未经专门请求的情况下以透明方式为进程分配的,因此它们也称为透明大页 (THP)。
供
SHM_HUGETLB
和MAP_HUGETLB
使用的,或者根据/proc/sys/vm/nr_hugepages
中的定义通过hugetlbfs
文件系统使用的预分配大页数。可用大页数。
已提交的大页数。
超出 “超量”),在
的可用大页数(/proc/sys/vm/nr_overcommit_hugepages
中定义。大页的大小 — 在 AMD64/Intel 64 上,默认值为 2048 KB。
- 等
映射到具有给定大小(示例中为 4 kB)的页的内核内存量。
2.4.3 进程内存用量:smaps #
使用 top
或 ps
等标准工具无法确切地确定特定进程消耗的内存量。如果您需要确切的数据,请使用内核 2.6.14 中引入的 smaps 子系统。可以在 /proc/PID/smaps
中找到该子系统,它会显示 ID 为 PID 的进程当时使用的空白内存页数和未写入内存页数。它会区分共享内存和专用内存,因此您可以查看进程使用的内存量,其中不包括与其他进程共享的内存。有关详细信息,请参见 /usr/src/linux/Documentation/filesystems/proc.txt
(需要安装软件包 kernel-source
)。
读取 smaps 会产生很高的开销。因此,不建议经常性地对其进行监视,而是仅在密切监视特定进程时才这样做。
2.4.4 numaTOP #
numaTOP 是适用于 NUMA(非一致性内存访问)系统的一个工具。该工具提供 NUMA 系统的实时分析,可帮助识别 NUMA 相关的性能瓶颈。
一般而言,numaTOP 可让您通过分析远程内存访问 (RMA) 数、本地内存访问 (LMA) 数和 RMA/LMA 比率,来识别和调查位置不佳(即,本地内存用量与远程内存用量之比不佳)的进程和线程。
PowerPC 以及以下 Intel Xeon 处理器支持 numaTOP:5500 系列、6500/7500 系列、5600 系列、E7-x8xx 系列和 E5-16xx/24xx/26xx/46xx 系列。
numaTOP 在官方软件储存库中提供,您可以使用 sudo zypper in
numatop
命令安装该工具。要启动 numaTOP,请运行 numatop
命令。要获取 numaTOP 功能和用法的概览,请使用 man
numatop
命令。
2.5 网络 #
如果网络带宽低于预期,您应该先检查是否对网段激活了任何流量整形规则。
2.5.1 基本网络诊断:ip
#
ip
是用于设置和控制网络接口的强大工具。还可以使用它来快速查看有关系统网络接口的基本统计。例如,接口是否已启动,或是发生了多少错误、丢包或包冲突。
如果不结合使用任何附加参数运行 ip
,它会显示帮助输出。要列出所有网络接口,请输入 ip addr show
(或缩写形式 ip
a
)。ip addr show up
仅列出正在运行的网络接口。ip -s link show
DEVICE 仅列出指定的接口的统计:
#
ip -s link show br0
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
link/ether 00:19:d1:72:d4:30 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
6346104756 9265517 0 10860 0 0
TX: bytes packets errors dropped carrier collsns
3996204683 3655523 0 0 0 0
ip
还可以显示接口 (link
)、路由表 (route
) 等信息 - 有关细节,请参见 man 8 ip
。
#
ip route
default via 192.168.2.1 dev eth1
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.100
192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.101
192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.102
#
ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:44:30:51 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:a3:c1:fb brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:32:a4:09 brd ff:ff:ff:ff:ff:ff
2.5.2
显示进程的网络用量:nethogs
#
在某些情况下(例如,如果网络流量突然变得很高),需要该工具来快速找到导致流量的应用程序。nethogs
工具在设计上类似于 top
,可显示所有相关进程的传入和传出流量:
PID USER PROGRAM DEV SENT RECEIVED 27145 root zypper eth0 5.719 391.749 KB/sec ? root ..0:113:80c0:8080:10:160:0:100:30015 0.102 2.326 KB/sec 26635 tux /usr/lib64/firefox/firefox eth0 0.026 0.026 KB/sec ? root ..0:113:80c0:8080:10:160:0:100:30045 0.000 0.021 KB/sec ? root ..0:113:80c0:8080:10:160:0:100:30045 0.000 0.018 KB/sec ? root ..0:113:80c0:8080:10:160:0:100:30015 0.000 0.018 KB/sec ? root ..0:113:80c0:8080:10:160:0:100:30045 0.000 0.017 KB/sec ? root ..0:113:80c0:8080:10:160:0:100:30045 0.000 0.017 KB/sec ? root ..0:113:80c0:8080:10:160:0:100:30045 0.069 0.000 KB/sec ? root unknown TCP 0.000 0.000 KB/sec TOTAL 5.916 394.192 KB/sec
与 top
一样,nethogs
支持交互式命令:
M:在显示模式(kb/s、kb、b、mb)之间循环 |
R:按 排序 |
S:按 排序 |
Q:退出 |
2.5.3 以太网卡细节:ethtool #
ethtool
可详细显示和更改以太网设备的各个方面。默认情况下,它会列显指定设备的当前设置。
#
ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
[...]
Link detected: yes
下表显示了可用于查询设备特定信息的 ethtool
选项:
ethtool
的查询选项列表 #
|
查询设备的以下信息 |
---|---|
-a |
暂停参数信息 |
-c |
中断合并信息 |
-g <组文件> |
Rx/Tx(接收/传输)环参数信息 |
-i |
关联的驱动程序信息 |
-k |
减负信息 |
-S |
NIC 和驱动程序特定的统计 |
2.5.4 显示网络状态:ss
#
ss
是用于转储套接字统计的工具,可取代 netstat
命令。要列出所有连接,请使用不带参数的 ss
:
#
ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 14082 * 14083
u_str ESTAB 0 0 * 18582 * 18583
u_str ESTAB 0 0 * 19449 * 19450
u_str ESTAB 0 0 @/tmp/dbus-gmUUwXABPV 18784 * 18783
u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 19383 * 19382
u_str ESTAB 0 0 @/tmp/dbus-gmUUwXABPV 18617 * 18616
u_str ESTAB 0 0 @/tmp/dbus-58TPPDv8qv 19352 * 19351
u_str ESTAB 0 0 * 17658 * 17657
u_str ESTAB 0 0 * 17693 * 17694
[..]
要显示当前打开的所有网络端口,请使用以下命令:
#
ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:4195117 *
nl UNCONN 0 0 rtnl:wickedd-auto4/811 *
nl UNCONN 0 0 rtnl:wickedd-dhcp4/813 *
nl UNCONN 0 0 rtnl:4195121 *
nl UNCONN 0 0 rtnl:4195115 *
nl UNCONN 0 0 rtnl:wickedd-dhcp6/814 *
nl UNCONN 0 0 rtnl:kernel *
nl UNCONN 0 0 rtnl:wickedd/817 *
nl UNCONN 0 0 rtnl:4195118 *
nl UNCONN 0 0 rtnl:nscd/706 *
nl UNCONN 4352 0 tcpdiag:ss/2381 *
[...]
显示网络连接时,您可以指定要显示的套接字类型:例如 TCP (-t
) 或 UDP (-u
)。-p
选项显示套接字所属程序的 PID 和名称。
下例列出了所有 TCP 连接和使用这些连接的程序。-a
选项确保显示所有已建立的连接(监听和非监听)。-p
选项显示套接字所属程序的 PID 和名称。
#
ss -t -a -p
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:* users:(("sshd",1551,3))
LISTEN 0 100 127.0.0.1:smtp *:* users:(("master",1704,13))
ESTAB 0 132 10.120.65.198:ssh 10.120.4.150:55715 users:(("sshd",2103,5))
LISTEN 0 128 :::ssh :::* users:(("sshd",1551,4))
LISTEN 0 100 ::1:smtp :::* users:(("master",1704,14))
2.6 /proc
文件系统 #
/proc
文件系统是一个伪文件系统,在该文件系统中,内核以虚拟文件的形式保留重要信息。例如,使用以下命令显示 CPU 类型:
>
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 30
model name : Intel(R) Core(TM) i5 CPU 750 @ 2.67GHz
stepping : 5
microcode : 0x6
cpu MHz : 1197.000
cache size : 8192 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips : 5333.85
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
[...]
还可以运行 x86info
来获取有关 AMD64/Intel 64 体系结构上处理器的详细信息。
用下列命令查询中断的分配和使用:
>
cat /proc/interrupts
CPU0 CPU1 CPU2 CPU3
0: 121 0 0 0 IO-APIC-edge timer
8: 0 0 0 1 IO-APIC-edge rtc0
9: 0 0 0 0 IO-APIC-fasteoi acpi
16: 0 11933 0 0 IO-APIC-fasteoi ehci_hcd:+
18: 0 0 0 0 IO-APIC-fasteoi i801_smbus
19: 0 117978 0 0 IO-APIC-fasteoi ata_piix,+
22: 0 0 3275185 0 IO-APIC-fasteoi enp5s1
23: 417927 0 0 0 IO-APIC-fasteoi ehci_hcd:+
40: 2727916 0 0 0 HPET_MSI-edge hpet2
41: 0 2749134 0 0 HPET_MSI-edge hpet3
42: 0 0 2759148 0 HPET_MSI-edge hpet4
43: 0 0 0 2678206 HPET_MSI-edge hpet5
45: 0 0 0 0 PCI-MSI-edge aerdrv, P+
46: 0 0 0 0 PCI-MSI-edge PCIe PME,+
47: 0 0 0 0 PCI-MSI-edge PCIe PME,+
48: 0 0 0 0 PCI-MSI-edge PCIe PME,+
49: 0 0 0 387 PCI-MSI-edge snd_hda_i+
50: 933117 0 0 0 PCI-MSI-edge nvidia
NMI: 2102 2023 2031 1920 Non-maskable interrupts
LOC: 92 71 57 41 Local timer interrupts
SPU: 0 0 0 0 Spurious interrupts
PMI: 2102 2023 2031 1920 Performance monitoring int+
IWI: 47331 45725 52464 46775 IRQ work interrupts
RTR: 2 0 0 0 APIC ICR read retries
RES: 472911 396463 339792 323820 Rescheduling interrupts
CAL: 48389 47345 54113 50478 Function call interrupts
TLB: 28410 26804 24389 26157 TLB shootdowns
TRM: 0 0 0 0 Thermal event interrupts
THR: 0 0 0 0 Threshold APIC interrupts
MCE: 0 0 0 0 Machine check exceptions
MCP: 40 40 40 40 Machine check polls
ERR: 0
MIS: 0
maps
文件中包含可执行文件和库的地址指派:
>
cat /proc/self/maps
08048000-0804c000 r-xp 00000000 03:03 17753 /bin/cat
0804c000-0804d000 rw-p 00004000 03:03 17753 /bin/cat
0804d000-0806e000 rw-p 0804d000 00:00 0 [heap]
b7d27000-b7d5a000 r--p 00000000 03:03 11867 /usr/lib/locale/en_GB.utf8/
b7d5a000-b7e32000 r--p 00000000 03:03 11868 /usr/lib/locale/en_GB.utf8/
b7e32000-b7e33000 rw-p b7e32000 00:00 0
b7e33000-b7f45000 r-xp 00000000 03:03 8837 /lib/libc-2.3.6.so
b7f45000-b7f46000 r--p 00112000 03:03 8837 /lib/libc-2.3.6.so
b7f46000-b7f48000 rw-p 00113000 03:03 8837 /lib/libc-2.3.6.so
b7f48000-b7f4c000 rw-p b7f48000 00:00 0
b7f52000-b7f53000 r--p 00000000 03:03 11842 /usr/lib/locale/en_GB.utf8/
[...]
b7f5b000-b7f61000 r--s 00000000 03:03 9109 /usr/lib/gconv/gconv-module
b7f61000-b7f62000 r--p 00000000 03:03 9720 /usr/lib/locale/en_GB.utf8/
b7f62000-b7f76000 r-xp 00000000 03:03 8828 /lib/ld-2.3.6.so
b7f76000-b7f78000 rw-p 00013000 03:03 8828 /lib/ld-2.3.6.so
bfd61000-bfd76000 rw-p bfd61000 00:00 0 [stack]
ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
可以从 /proc 文件系统获取大量详细信息。一些重要的文件及其内容如下:
/proc/devices
可用设备
/proc/modules
装载的内核模块
/proc/cmdline
内核命令行
/proc/meminfo
有关内存使用的详细信息
/proc/config.gz
当前运行的内核的
gzip
压缩配置文件- /proc/PID/
/proc/
NNN 目录中提供了当前运行进程的信息,其中 NNN 是相关进程的进程 ID (PID)。每个进程都可以在/proc/self/
中找到其自身的特征。
文本文件 /usr/src/linux/Documentation/filesystems/proc.txt
中提供了更多信息(安装软件包 kernel-source
后会提供此文件)。
2.6.1 procinfo
#
命令 procinfo
可以汇总 /proc
文件系统中的重要信息:
>
procinfo
Linux 3.11.10-17-desktop (geeko@buildhost) (gcc 4.8.1 20130909) #1 4CPU [jupiter.example.com]
Memory: Total Used Free Shared Buffers Cached
Mem: 8181908 8000632 181276 0 85472 2850872
Swap: 10481660 1576 10480084
Bootup: Mon Jul 28 09:54:13 2014 Load average: 1.61 0.85 0.74 2/904 25949
user : 1:54:41.84 12.7% page in : 2107312 disk 1: 52212r 20199w
nice : 0:00:00.46 0.0% page out: 1714461 disk 2: 19387r 10928w
system: 0:25:38.00 2.8% page act: 466673 disk 3: 548r 10w
IOwait: 0:04:16.45 0.4% page dea: 272297
hw irq: 0:00:00.42 0.0% page flt: 105754526
sw irq: 0:01:26.48 0.1% swap in : 0
idle : 12:14:43.65 81.5% swap out: 394
guest : 0:02:18.59 0.2%
uptime: 3:45:22.24 context : 99809844
irq 0: 121 timer irq 41: 3238224 hpet3
irq 8: 1 rtc0 irq 42: 3251898 hpet4
irq 9: 0 acpi irq 43: 3156368 hpet5
irq 16: 14589 ehci_hcd:usb1 irq 45: 0 aerdrv, PCIe PME
irq 18: 0 i801_smbus irq 46: 0 PCIe PME, pciehp
irq 19: 124861 ata_piix, ata_piix, f irq 47: 0 PCIe PME, pciehp
irq 22: 3742817 enp5s1 irq 48: 0 PCIe PME, pciehp
irq 23: 479248 ehci_hcd:usb2 irq 49: 387 snd_hda_intel
irq 40: 3216894 hpet2 irq 50: 1088673 nvidia
要查看所有信息,请使用参数 -a
。参数 -nN
每隔 N 秒更新一次信息。在这种情况下,按 Q 键终止程序。
默认情况下显示累积值。参数 -d
生成差异值。procinfo
-dn5
显示过去五秒内已更改的值:
2.6.2 系统控制参数:/proc/sys/
#
系统控制参数用于在运行时修改 Linux 内核参数。它们位于 /proc/sys/
中,可使用 sysctl
命令来查看和修改。要列出所有参数,请运行 sysctl
-a
。可以使用 sysctl
PARAMETER_NAME 列出单个参数。
参数分为几类,可使用 sysctl
CATEGORY 或通过列出相应目录的内容将其列出。下面列出了最重要的类别。需要安装软件包 kernel-source
才能获取更多阅读内容的链接。
sysctl dev
(/proc/sys/dev/
)设备特定的信息。
sysctl fs
(/proc/sys/fs/
)使用的文件句柄、配额和其他文件系统导向的参数。有关详细信息,请参见
/usr/src/linux/Documentation/sysctl/fs.txt
。sysctl kernel
(/proc/sys/kernel/
)有关任务调度程序、系统共享内存和其他内核相关参数的信息。有关细节,请参见
/usr/src/linux/Documentation/sysctl/kernel.txt
sysctl net
(/proc/sys/net/
)有关网桥和一般网络参数的信息(主要为
ipv4/
子目录)。有关细节,请参见/usr/src/linux/Documentation/sysctl/net.txt
sysctl vm
(/proc/sys/vm/
)此路径中的项与有关虚拟内存、交换和缓存的信息相关。有关细节,请参见
/usr/src/linux/Documentation/sysctl/vm.txt
要设置或更改当前会话的参数,请使用命令 sysctl
-w
PARAMETER=VALUE。要永久更改某项设置,请在 /etc/sysctl.conf
中添加 PARAMETER=VALUE 行。
2.7 硬件信息 #
2.7.1 PCI 资源:lspci
#
大多数操作系统需要 root 用户特权才能授予对计算机 PCI 配置的访问权限。
命令 lspci
列出 PCI 资源:
#
lspci
00:00.0 Host bridge: Intel Corporation 82845G/GL[Brookdale-G]/GE/PE \
DRAM Controller/Host-Hub Interface (rev 01)
00:01.0 PCI bridge: Intel Corporation 82845G/GL[Brookdale-G]/GE/PE \
Host-to-AGP Bridge (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM \
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM \
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM \
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM \
(ICH4/ICH4-M) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 81)
00:1f.0 ISA bridge: Intel Corporation 82801DB/DBL (ICH4/ICH4-L) \
LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801DB (ICH4) IDE \
Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) \
SMBus Controller (rev 01)
00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM \
(ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01)
01:00.0 VGA compatible controller: Matrox Graphics, Inc. G400/G450 (rev 85)
02:08.0 Ethernet controller: Intel Corporation 82801DB PRO/100 VE (LOM) \
Ethernet Controller (rev 81)
使用 -v
可以生成更详细的列表:
#
lspci -v
[...]
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet \
Controller (rev 02)
Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter
Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 19
Memory at f0000000 (32-bit, non-prefetchable) [size=128K]
I/O ports at d010 [size=8]
Capabilities: [dc] Power Management version 2
Capabilities: [e4] PCI-X non-bridge device
Kernel driver in use: e1000
Kernel modules: e1000
从文件 /usr/share/pci.ids
中获取有关设备名称解析的信息。此文件中未列出的 PCI ID 标有“未知设备”。
参数 -vv
生成程序可查询的所有信息。要查看纯数字值,请使用参数 -n
。
2.7.2 USB 设备:lsusb
#
命令 lsusb
列出所有 USB 设备。使用选项 -v
可列显更详细的列表。从目录 /proc/bus/usb/
读取详细信息。下面是在挂接集线器、内存条、硬盘和鼠标等 USB 设备情况下运行 lsusb
后的输出。
#
lsusb
Bus 004 Device 007: ID 0ea0:2168 Ours Technology, Inc. Transcend JetFlash \
2.0 / Astone USB Drive
Bus 004 Device 006: ID 04b4:6830 Cypress Semiconductor Corp. USB-2.0 IDE \
Adapter
Bus 004 Device 005: ID 05e3:0605 Genesys Logic, Inc.
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 005: ID 046d:c012 Logitech, Inc. Optical Mouse
Bus 001 Device 001: ID 0000:0000
2.7.3
监视和微调热子系统:tmon
#
tmon
是能够帮助可视化、微调和测试复杂热子系统的工具。如果不使用任何参数启动,tmon
将以监视模式运行:
┌──────THERMAL ZONES(SENSORS)──────────────────────────────┐ │Thermal Zones: acpitz00 │ │Trip Points: PC │ └──────────────────────────────────────────────────────────┘ ┌─────────── COOLING DEVICES ──────────────────────────────┐ │ID Cooling Dev Cur Max Thermal Zone Binding │ │00 Processor 0 3 ││││││││││││ │ │01 Processor 0 3 ││││││││││││ │ │02 Processor 0 3 ││││││││││││ │ │03 Processor 0 3 ││││││││││││ │ │04 intel_powerc -1 50 ││││││││││││ │ └──────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────┐ │ 10 20 30 40 │ │acpitz 0:[ 8][>>>>>>>>>P9 C31 │ └──────────────────────────────────────────────────────────┘ ┌────────────────── CONTROLS ──────────────────────────────┐ │PID gain: kp=0.36 ki=5.00 kd=0.19 Output 0.00 │ │Target Temp: 65.0C, Zone: 0, Control Device: None │ └──────────────────────────────────────────────────────────┘ Ctrl-c - Quit TAB - Tuning
有关如何解释数据、如何记录热数据,以及如何使用 tmon
测试和微调散热设备与传感器的详细信息,请参见手册页:man 8
tmon
。默认情况下不会安装软件包 tmon。
2.7.4 MCELog:计算机检查异常 (MCE) #
此工具仅适用于 AMD64/Intel 64 系统。
发生硬件错误(包括 I/O、CPU 和内存错误)时,mcelog
软件包可记录和分析/转换计算机检查异常 (MCE)。此外,当发生缓存错误时,mcelog 还可以处理预测型坏页脱机和自动核心脱机。以前,此问题由每小时执行的 cron 作业管理。现在,硬件错误可由 mcelog 守护程序立即处理。
SUSE Linux Enterprise Server 支持 AMD 的可缩放计算机检查体系结构(可缩放 MCA)。可缩放 MCA 增强了 AMD Zen 处理器中的硬件错误报告。它扩展了 MCA Bank 中记录的信息,改善了错误处理并提高了可诊断性。
mcelog
捕获 MCA 消息(rasdaemon
和 dmesg
也捕获 MCA 消息)。有关详细信息,请参见《Processor Programming Reference (PPR) for AMD Family
17h Model 01h, Revision B1 Processors》的第 3.1 节“Machine Check Architecture”(http://developer.amd.com/wordpress/media/2017/11/54945_PPR_Family_17h_Models_00h-0Fh.pdf)。
mcelog 在 /etc/mcelog/mcelog.conf
中配置。man mcelog
和 http://mcelog.org/ 中介绍了配置选项。以下示例仅显示了对默认文件的更改:
daemon = yes filter = yes filter-memory-errors = yes no-syslog = yes logfile = /var/log/mcelog run-credentials-user = root run-credentials-group = nobody client-group = root socket-path = /var/run/mcelog-client
默认未启用 mcelog 服务。可以通过 YaST 系统服务编辑器或命令行启用和启动该服务:
#
systemctl enable mcelog#
systemctl start mcelog
2.7.5 AMD64/Intel 64:dmidecode:DMI 表解码器 #
dmidecode
显示计算机的 DMI 表,其中包含硬件的序列号和 BIOS 修订版等信息。
#
dmidecode
# dmidecode 2.12
SMBIOS 2.5 present.
27 structures occupying 1298 bytes.
Table at 0x000EB250.
Handle 0x0000, DMI type 4, 35 bytes
Processor Information
Socket Designation: J1PR
Type: Central Processor
Family: Other
Manufacturer: Intel(R) Corporation
ID: E5 06 01 00 FF FB EB BF
Version: Intel(R) Core(TM) i5 CPU 750 @ 2.67GHz
Voltage: 1.1 V
External Clock: 133 MHz
Max Speed: 4000 MHz
Current Speed: 2667 MHz
Status: Populated, Enabled
Upgrade: Other
L1 Cache Handle: 0x0004
L2 Cache Handle: 0x0003
L3 Cache Handle: 0x0001
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified
[..]
2.7.6 POWER:列出硬件 #
lshw
提取并显示计算机的硬件配置。
2.8 文件和文件系统 #
有关文件系统特定的信息,请参见储存管理指南。
2.8.1 确定文件类型:file
#
命令 file
通过检查 /usr/share/misc/magic
来确定某个文件或文件列表的类型。
>
file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), \
for GNU/Linux 2.6.4, dynamically linked (uses shared libs), stripped
参数 -f LIST
指定要检查的一个或一系列文件名。-z
允许 file
在压缩文件的内部查找:
>
file /usr/share/man/man1/file.1.gz /usr/share/man/man1/file.1.gz: gzip compressed data, from Unix, max compression>
file -z /usr/share/man/man1/file.1.gz /usr/share/man/man1/file.1.gz: troff or preprocessor input text \ (gzip compressed data, from Unix, max compression)
参数 -i
输出 mime 类型的字符串而不是传统的说明。
>
file -i /usr/share/misc/magic
/usr/share/misc/magic: text/plain charset=utf-8
2.8.2 文件系统及其用法:mount
、df
和 du
#
命令 mount
显示在哪个挂载点挂载哪个文件系统(设备和类型):
#
mount
/dev/sda2 on / type ext4 (rw,acl,user_xattr)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
debugfs on /sys/kernel/debug type debugfs (rw)
devtmpfs on /dev type devtmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,mode=1777)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
/dev/sda3 on /home type ext3 (rw)
securityfs on /sys/kernel/security type securityfs (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
gvfs-fuse-daemon on /home/tux/.gvfs type fuse.gvfs-fuse-daemon \
(rw,nosuid,nodev,user=tux)
使用命令 df
可以获得有关文件系统全部使用情况的信息。参数 -h
(或 --human-readable
)将输出转换为普通用户可以理解的形式。
>
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 20G 5,9G 13G 32% /
devtmpfs 1,6G 236K 1,6G 1% /dev
tmpfs 1,6G 668K 1,6G 1% /dev/shm
/dev/sda3 208G 40G 159G 20% /home
使用命令 du
可以显示给定目录及其子目录中所有文件的总大小。参数 -s
隐藏详细信息的输出,只提供每个参数的总计。-h
再次将输出转换为直观易懂的格式:
>
du -sh /opt
192M /opt
2.8.3 有关 ELF 二进制文件的其他信息 #
使用 readelf
实用程序读取二进制文件的内容。这甚至可用于为其他硬件体系结构生成的 ELF 文件:
>
readelf --file-header /bin/ls
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Advanced Micro Devices X86-64
Version: 0x1
Entry point address: 0x402540
Start of program headers: 64 (bytes into file)
Start of section headers: 95720 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers: 64 (bytes)
Number of section headers: 32
Section header string table index: 31
2.8.4 文件属性:stat
#
命令 stat
显示文件属性:
>
stat /etc/profile
File: `/etc/profile'
Size: 9662 Blocks: 24 IO Block: 4096 regular file
Device: 802h/2050d Inode: 132349 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-03-20 07:51:17.000000000 +0100
Modify: 2009-01-08 19:21:14.000000000 +0100
Change: 2009-03-18 12:55:31.000000000 +0100
参数 --file-system
生成指定文件所在的文件系统的属性细节:
>
stat /etc/profile --file-system
File: "/etc/profile"
ID: d4fb76e70b4d1746 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 2581445 Free: 1717327 Available: 1586197
Inodes: Total: 655776 Free: 490312
2.9 用户信息 #
2.9.1 访问文件的用户:fuser
#
它可用于确定当前哪些进程或用户正在访问特定的文件。例如,假设您想要卸载已挂载到 /mnt
的文件系统。umount
将返回“设备正忙”。然后可以使用 fuser
命令确定哪些进程正在访问该设备:
>
fuser -v /mnt/*
USER PID ACCESS COMMAND
/mnt/notes.txt tux 26597 f.... less
在终止 less
进程之后(该进程在另一个终端上运行),即可成功卸载该文件系统。与 -k
选项结合使用时,fuser
还会终止正在访问文件的进程。
2.9.2 哪些用户在执行哪些操作:w
#
使用命令 w
可以确定谁已登录到系统,以及每个用户正在执行的操作。例如:
>
w
16:00:59 up 1 day, 2:41, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
tux :0 console Wed13 ?xdm? 8:15 0.03s /usr/lib/gdm/gd
tux console :0 Wed13 26:41m 0.00s 0.03s /usr/lib/gdm/gd
tux pts/0 :0 Wed13 20:11 0.10s 2.89s /usr/lib/gnome-
如果其他系统的任何用户已远程登录,则参数 -f
将显示这些用户已从其上建立连接的计算机。
2.10 时间和日期 #
2.10.1 使用 time
计量时间 #
使用 time
实用程序的命令来确定花费的时间。此实用程序有两个版本:内置 Bash 和程序 (/usr/bin/time
)。
>
time find . > /dev/null
real 0m4.051s1
user 0m0.042s2
sys 0m0.205s3
/usr/bin/time
的输出要详细得多。建议结合使用 -v
开关运行此命令,以生成直观易懂的输出。
/usr/bin/time -v find . > /dev/null Command being timed: "find ." User time (seconds): 0.24 System time (seconds): 2.08 Percent of CPU this job got: 25% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:09.03 Average shared text size (kbytes): 0 Average unshared data size (kbytes): 0 Average stack size (kbytes): 0 Average total size (kbytes): 0 Maximum resident set size (kbytes): 2516 Average resident set size (kbytes): 0 Major (requiring I/O) page faults: 0 Minor (reclaiming a frame) page faults: 1564 Voluntary context switches: 36660 Involuntary context switches: 496 Swaps: 0 File system inputs: 0 File system outputs: 0 Socket messages sent: 0 Socket messages received: 0 Signals delivered: 0 Page size (bytes): 4096 Exit status: 0
2.11 绘制数据图表:RRDtool #
您的生活中存在大量可轻松即时测量的数据。例如,温度的变化,或者您计算机网络接口发送或接收的数据量。RRDtool 可帮助您存储这些数据,并将其可视化为详细的可自定义图表。
RRDtool 适用于大多数 Unix 平台和 Linux 发行套件。SUSE® Linux Enterprise Server 也随附有 RRDtool。请使用 YaST 或者
以 root
身份在命令行中输入 zypper
install
rrdtool 来安装此工具。
提供了 RRDtool 的 Perl、Python、Ruby 和 PHP 绑定,使您能够以偏好的脚本语言编写自己的监视脚本。
2.11.1 RRDtool 的工作原理 #
RRDtool 是循环复用数据库工具 (Round Robin Database tool) 的英文缩写。循环复用是操作恒量数据的一种方法。它采用循环缓冲区的原理,所读取的数据行既没有结尾,也没有开头。RRDtool 使用循环复用数据库来存储和读取其数据。
如前所述,RRDtool 用于处理即时变化的数据。典型的案例是传感器在恒定的时间段反复读取测量的数据(例如温度、速度等),然后以指定格式导出数据。此类数据十分适合通过 RRDtool 处理,它可以轻松处理并创建所需的输出。
有时无法定期自动获取数据。这些数据的格式需要经过预处理才能提供给 RRDtool,您甚至常常需要手动操作 RRDtool。
下面是 RRDtool 基本用法的简单示例。其中演示了常规 RRDtool 工作流程的所有三个重要阶段:创建数据库、更新测量值和查看输出。
2.11.2 实际示例 #
假设我们要收集并查看 Linux 系统中内存用量即时变化的信息。为使示例更生动,我们将以 4 秒为间隔,测量 40 秒时间段内的当前可用内存。启动再关闭三个通常会消耗大量系统内存的应用程序:Firefox 网页浏览器、Evolution 电子邮件客户端和 Eclipse 开发框架。
2.11.2.1 收集数据 #
RRDtool 经常用于测量和可视化网络流量。在这种情况下,会使用简单网络管理协议 (SNMP)。此协议可以查询网络设备的内部计数器的相关值。确切来说,这些值将通过 RRDtool 来存储。有关 SNMP 的详细信息,请参见 http://www.net-snmp.org/。
我们的情况有所不同 — 我们需要手动获取数据。助手脚本 free_mem.sh
将反复读取可用内存的当前状态,并将其写入标准输出。
>
cat free_mem.sh
INTERVAL=4
for steps in {1..10}
do
DATE=`date +%s`
FREEMEM=`free -b | grep "Mem" | awk '{ print $4 }'`
sleep $INTERVAL
echo "rrdtool update free_mem.rrd $DATE:$FREEMEM"
done
时间间隔设置为 4 秒并使用
sleep
命令来实施。RRDtool 接受采用特殊格式的时间信息 - 所谓的 Unix 时间。此时间定义为自 1970 年 1 月 1 日午夜 (UTC) 开始经过的秒数。例如,1272907114 表示 2010-05-03 17:18:34。
可用内存信息是使用
free
-b
以字节为单位报告的。将优先提供基本单位(字节)而不是倍数单位(例如 KB)。带有
echo ...
命令的行包含数据库文件 (free_mem.rrd
) 的未来名称,并共同创建了用于更新 RRDtool 值的命令行。
运行 free_mem.sh
后,您将看到如下所示的输出:
>
sh free_mem.sh
rrdtool update free_mem.rrd 1272974835:1182994432
rrdtool update free_mem.rrd 1272974839:1162817536
rrdtool update free_mem.rrd 1272974843:1096269824
rrdtool update free_mem.rrd 1272974847:1034219520
rrdtool update free_mem.rrd 1272974851:909438976
rrdtool update free_mem.rrd 1272974855:832454656
rrdtool update free_mem.rrd 1272974859:829120512
rrdtool update free_mem.rrd 1272974863:1180377088
rrdtool update free_mem.rrd 1272974867:1179369472
rrdtool update free_mem.rrd 1272974871:1181806592
可以方便地使用
sh free_mem.sh > free_mem_updates.log
将命令输出重定向到某个文件以简化此命令的未来执行。
2.11.2.2 创建数据库 #
使用以下命令为本示例创建初始的循环复用数据库:
>
rrdtool create free_mem.rrd --start 1272974834 --step=4 \
DS:memory:GAUGE:600:U:U RRA:AVERAGE:0.5:1:24
此命令会创建名为
free_mem.rrd
的文件,用于在循环复用数据库中存储测量值。--start
选项指定将第一个值添加到数据库的时间(采用 Unix 时间)。在本示例中,此值比free_mem.sh
输出的第一个时间值 (1272974835) 小 1。--step
指定向数据库提供测量数据的时间间隔(以秒为单位)。DS:memory:GAUGE:600:U:U
部分用于引入数据库的新数据源。此数据源名为 memory,类型为 gauge,两次更新之间的最大间隔为 600 秒,测量范围中的最小和最大值未知 (U)。RRA:AVERAGE:0.5:1:24
创建循环复用存档 (RRA),其中存储的数据是通过用于计算数据点平均值的合并函数 (CF) 处理的。合并函数的 3 个参数已追加到行尾。
如果未显示错误消息,则当前目录中已创建了 free_mem.rrd
数据库:
>
ls -l free_mem.rrd
-rw-r--r-- 1 tux users 776 May 5 12:50 free_mem.rrd
2.11.2.3 更新数据库值 #
创建数据库后,需在其中填充测量数据。在第 2.11.2.1 节 “收集数据”中,我们已准备好一个包含 rrdtool update
命令的 free_mem_updates.log
文件。这些命令将为我们执行数据库值的更新。
>
sh free_mem_updates.log; ls -l free_mem.rrd
-rw-r--r-- 1 tux users 776 May 5 13:29 free_mem.rrd
可以看到,即使是在更新数据后,free_mem.rrd
的大小仍保持不变。
2.11.2.4 查看测量值 #
我们已测量了值,创建了数据库,并在其中存储了测量值。现在我们便可以操作该数据库,并检索或查看其数据。
要检索数据库中的所有值,请在命令行上输入以下命令:
>
rrdtool fetch free_mem.rrd AVERAGE --start 1272974830 \
--end 1272974871
memory
1272974832: nan
1272974836: 1.1729059840e+09
1272974840: 1.1461806080e+09
1272974844: 1.0807572480e+09
1272974848: 1.0030243840e+09
1272974852: 8.9019289600e+08
1272974856: 8.3162112000e+08
1272974860: 9.1693465600e+08
1272974864: 1.1801251840e+09
1272974868: 1.1799787520e+09
1272974872: nan
AVERAGE
将从数据库提取平均值点,因为只通过AVERAGE
处理定义了一个数据源(第 2.11.2.2 节 “创建数据库”),并且没有其他可用函数。输出的第一行列显第 2.11.2.2 节 “创建数据库”中定义的数据源的名称。
左侧结果列表示各个时间点,右侧结果列以科学记数法表示对应的测量平均值。
最后一行中的
nan
表示“不是数字”。
现在将绘制一个图表来表示数据库中存储的值:
>
rrdtool graph free_mem.png \
--start 1272974830 \
--end 1272974871 \
--step=4 \
DEF:free_memory=free_mem.rrd:memory:AVERAGE \
LINE2:free_memory#FF0000 \
--vertical-label "GB" \
--title "Free System Memory in Time" \
--zoom 1.5 \
--x-grid SECOND:1:SECOND:4:SECOND:10:0:%X
free_mem.png
是要创建的图表的文件名。--start
和--end
限制要绘制图表的时间范围。--step
指定图表的时间解析度(以秒为单位)。DEF:...
部分是名为 free_memory 的数据定义。其数据将从free_mem.rrd
数据库读取,其数据源名为 memory。将计算平均值点,因为第 2.11.2.2 节 “创建数据库”中未定义其他值点。LINE...
部分指定要绘制到图表中的线条的属性。其宽度为 2 像素,数据来自 free_memory 定义,颜色为红色。--vertical-label
设置要在 y 轴上列显的标签,--title
设置整个图表的主标签。--zoom
指定图表的缩放系数。此值必须大于零。--x-grid
指定如何在图表中绘制网格线及其标签。本示例每隔一秒绘制一次网格线,每隔 4 秒绘制一次主网格线。每隔 10 秒将标签绘制在主网格线下。
2.11.3 更多信息 #
RRDtool 是一个非常复杂的工具,它附带了许多子命令和命令行选项。其中一些命令和选项很容易理解,但要使它生成所需的结果并根据您的喜好对其进行微调,可能还要花费许多功夫。
请参考 RRDtool 的手册页 (man 1 rrdtool
),但其中只提供了基本信息,除此之外,您还应该查看 RRDtool home
page。rrdtool
命令及其所有子命令有详细的documentation可供参考。此外,还有几篇tutorials可帮助您理解常用的 RRDtool 工作流程。
如果您对监视网络流量感兴趣,请查看 MRTG (Multi Router Traffic Grapher)。MRTG 可以绘制许多网络设备的活动图表。它可以使用 RRDtool。