概述
在Linux中,有许多命令和工具可用于查看系统的资源使用情况。以下是一些常用的方式:
-
top:
top
命令是最常见的实时系统监视工具之一。它显示了当前运行的进程列表,以及每个进程的CPU、内存使用情况、nice
值等信息。top
命令还会不断刷新数据,展示最新的系统状态。 -
htop:
htop
是top
的一个增强版,提供了更好的可视化界面和更多功能,如颜色编码、水平滚动、搜索等功能。安装htop
后,在终端输入htop
即可使用。 -
ps:
ps
命令用于列出当前运行的进程。通过添加适当的选项,可以获取有关进程的各种信息,如CPU使用率、内存使用情况等。例如,ps -aux
会显示所有进程的详细信息。 -
free:
free
命令显示系统的内存使用情况,包括物理内存、交换内存和缓存等。 -
vmstat:
vmstat
报告虚拟内存统计信息,包括系统活动、进程状态、内存使用情况等。 -
iostat:
iostat
显示设备级别的I/O统计信息,如磁盘读写速率、CPU利用率等。 -
df:
df
命令显示文件系统的磁盘空间使用情况,包括已使用的空间、剩余的空间和总容量。 -
du:
du
命令显示目录或文件所占的磁盘空间大小。 -
netstat:
netstat
显示网络连接、路由表、接口统计等信息。 -
ifconfig:
ifconfig
显示网络接口的配置信息,如IP地址、MAC地址、收发包数量等。 -
lsof:
lsof
列出系统中打开的文件,包括文件所属的进程、文件类型等信息。 -
dmesg:
dmesg
显示内核消息,包括硬件检测结果、错误信息等。 -
sysstat:这是一个包含多种工具的软件包,如
sar
(系统活动报告)、iostat
、mpstat
等,用于深入分析系统性能。 -
System Monitor GUI:如果你使用的是图形化桌面环境,可以使用内置的系统监视器应用,如Gnome System Monitor、KSysGuard等。
-
/proc:
/proc
是一个虚拟文件系统,包含了大量关于系统和进程的信息。通过阅读/proc
下的文件,可以获得各种系统信息。 -
uname: 查看系统与内核相关信息
-
uptime:查看系统启动时间与任务负载
一、实时系统监视 top
top
命令是Linux系统中常用的实时系统监视工具,它能够显示系统中各个进程的资源使用情况,包括CPU使用率、内存使用情况、进程状态等。要在终端中启动top
,只需输入top
命令并按回车键。top
会立即显示当前系统状态,并持续刷新数据。
2.1 显示内容
这张图片显示了一个典型的top
命令输出,它提供了系统资源使用情况的实时概览。以下是各部分的解释:
-
标题行:顶部一行显示了当前时间、系统运行时间、登录用户数和平均负载。在这个例子中,系统已经运行了5天53分钟,没有用户登录,平均负载分别为0.52、0.58和0.59。
-
系统资源使用情况:接下来的一行显示了CPU和内存使用情况。在这个例子中,CPU使用率为5.3%(用户态+系统态),内存使用率为11796 MiB,交换空间使用了2399 MiB。
-
进程状态:第三行显示了进程总数、运行中的进程数、停止的进程数和僵尸进程数。在这个例子中,共有10个进程,1个正在运行,9个处于睡眠状态,没有停止或僵尸进程。
-
CPU使用率:第四行显示了CPU使用率的细分,包括用户态、系统态、空闲态、等待I/O、硬件中断、软件中断和被偷取的时间。在这个例子中,用户态和系统态分别使用了5.3%,空闲态使用了89.3%,其余的百分比由其他状态占据。
-
内存使用情况:第五行显示了内存总量、空闲内存、缓冲区内存和可用内存。在这个例子中,总内存为16016.5 MiB,其中有3995.9 MiB空闲,11796.6 MiB未被使用,224.0 MiB作为缓冲区使用,还有4089.3 MiB可供使用。
-
交换空间使用情况:第六行显示了交换空间总量、空闲空间和使用空间。在这个例子中,总交换空间为29440.1 MiB,其中有27070.5 MiB空闲,2369.6 MiB被使用。
-
进程列表:剩下的部分是进程列表,每一行代表一个进程。列表的列包括:
PID
:进程ID。USER
:进程的所有者。PR
:优先级。NI
:nice
值。VIRT
:虚拟内存使用情况。RES
:常驻集大小,即非交换内存使用情况。SHR
:共享内存大小。S
:进程状态(R=运行、S=睡眠等)。%CPU
:CPU使用率。%MEM
:内存使用率。TIME+
:累计CPU时间。COMMAND
:进程名称。
在这个例子中,可以看到几个进程,包括init
、bash
和top
本身。top
进程的CPU使用率为0.0%,内存使用率为0.0%,累计CPU时间为0秒。
2.2 交互式操作
top
命令具有丰富的交互式功能,可以在运行过程中进行操作。按h
键可以显示帮助信息,了解更多快捷键和操作。
刷新频率
- 设置刷新频率:按
s
键,然后输入秒数,例如5
,表示每 5 秒刷新一次。
排序
- 按 CPU 使用率排序:按
o
键,然后按c
或C
键,将按 CPU 使用率从高到低排序。- 按内存使用率排序:按
o
键,然后按m
或M
键,将按内存使用率从高到低排序。
进程操作
改变进程优先级:
- 选择一个进程:使用方向键将光标移动到想要操作的进程上。
- 按
r
键,然后输入新的 nice 值(范围 -20 至 19),并按 Enter 确认。杀死进程:
- 选择一个进程:使用方向键将光标移动到想要操作的进程上。
- 按
k
键,然后输入进程 ID 和要发送的信号(默认为SIGTERM
),并按 Enter 确认。
显示选项
- 显示线程:按
H
键显示或隐藏线程信息。- 显示内存使用情况:按
m
键切换显示内存使用情况(总内存、空闲内存等)。
常用快捷键
h
:显示帮助信息。H
:显示线程信息。m
:切换显示内存使用情况(总内存、空闲内存等)。w
:保存当前top
界面到文件。s
:设置更新间隔。q
:退出top
。
四、查看内存 free
free
是一个常用的 Linux 命令,用于显示系统内存的使用情况。它可以提供有关物理内存、交换空间和共享内存的信息。
4.1 基本语法
free [选项]
选项
-h
或--human-readable
: 以人类可读的格式显示内存大小(例如,自动将字节转换为 KB, MB, GB 等)。-m
或--mega
: 显示以兆字节 (MB) 为单位的内存大小。-k
或--kilo
: 显示以千字节 (KB) 为单位的内存大小(这是默认值)。-g
或--giga
: 显示以吉字节 (GB) 为单位的内存大小。-b
或--bytes
: 显示以字节 (B) 为单位的内存大小。-l
或--low
: 显示低内存区域的使用情况(仅适用于某些系统)。-t
或--total
: 在输出末尾添加一行汇总所有类型的内存。-s
或--seconds
: 每秒更新一次显示结果,直到被中断。-V
或--version
: 显示版本信息。
输出解释
free
命令的基本输出通常包含以下几行:
- total: 总共可用的内存。
- used: 当前使用的内存。
- free: 当前未被任何进程使用的空闲内存。
- shared: 被多个进程共享的内存总量。
- buff/cache: 用于文件系统缓存和内核缓冲区的内存总量。
- available: 可供新应用程序使用的内存量估计。
注意事项
buff/cache
列显示的是被用作文件系统缓存和内核缓冲区的内存。这部分内存可以很快地被释放出来供其他用途使用。available
列显示的是系统可以分配给新的应用程序的内存量。这个值考虑了系统需要保持响应性的内存预留。- 通常情况下,即使
used
列显示大量的内存被使用,但只要available
列显示有足够的内存,系统性能仍然应该是良好的。
4.2 示例
假设我们的系统有 2848MB 的物理内存和 1GB 的交换空间,使用 free -m
命令后,输出可能如下所示:
total used free shared buffers cached available
Mem: 2848 2142 706 0 0 1234 1942
Swap: 1024 0 1024
- Mem:
total
: 2848MB 的物理内存。used
: 2142MB 的物理内存被使用。free
: 706MB 的物理内存是真正空闲的。buffers
: 0MB 用于文件系统缓存。cached
: 1234MB 用于内核缓冲区。available
: 1942MB 的物理内存可供新进程使用。
- Swap:
total
: 1024MB 的交换空间。used
: 0MB 的交换空间被使用。free
: 1024MB 的交换空间是空闲的。
缓冲和缓存的作用
- buffers/cached: 这些内存被系统用来缓存文件和其他数据,以便在需要时能够更快地访问它们,从而提高系统性能。
- available: 这个数值表示在系统需要更多内存时可以迅速分配给新进程的内存量。即使
used
显示大量内存被占用,但只要available
数值足够大,系统仍然能够高效运行。
内存使用建议
- 实体内存使用: Linux 系统倾向于尽可能多地使用内存进行缓存和缓冲,这是为了提高文件和数据的读取速度。因此,即使 “used” 显示内存被大量占用也是正常现象。
- swap 使用: 如果交换空间(swap)被大量使用(超过 20%),这通常表明实体内存不足。在这种情况下,考虑增加物理内存可能是更好的选择,因为频繁使用 swap 会导致系统性能下降。
4.3 缓存机制
Linux系统为了提高系统性能,会将最常使用的或是最近使用到的文件数据缓存(cathe)下来,这样未来系统要使用该文件时,就可以直接由内存中查找取出,而不需要重新读取硬盘,速度自然就加快了。因此,物理内存被用光是正常的现象。
缓存的工作原理
- 读取缓存 (read cache):当文件第一次被读取时,其内容会被复制到内存中的缓存区域。之后对该文件的读取操作可以直接从缓存中读取,而不需要访问磁盘。
- 写入缓存 (write cache):类似地,当文件被修改时,更改的内容也会被暂存在内存中。随后的写入操作可以先更新缓存中的数据,然后系统会在适当的时候将这些更改同步到磁盘上。
缓存的好处
- 提高性能:由于内存的访问速度远快于磁盘,使用缓存可以显著减少 I/O 操作的时间,进而提升整个系统的响应速度。
- 减少磁盘 I/O:通过减少对磁盘的直接访问,可以减轻磁盘负担,延长磁盘寿命。
- 优化资源利用:Linux 会尽可能利用空闲内存来缓存数据,这样即使看起来所有的内存都被“用光”了,实际上系统仍然可以高效运行。
物理内存的使用
- 缓存和缓冲区:Linux 会使用一部分物理内存作为缓存和缓冲区,存储经常使用的文件数据。这部分内存被称为
buffers
和cached
。 - 可用内存:尽管
used
列显示了大量的内存被占用,但其中一部分实际上是用于缓存和缓冲的数据。这些数据在需要时可以迅速释放,以便为新的进程分配内存。因此,available
列显示了系统可以立即分配给新进程的内存量。
九、追踪网络或socket文件 netstat
netstat
(网络统计)是一个强大的命令行工具,用于显示网络连接、路由表、接口统计等网络相关信息。它可以帮助用户监控网络连接的状态以及查看端口监听情况。
9.1 基本使用
netstat [选项]
netstat
支持多种选项,用于定制输出的信息。常用的选项包括:
-a
或--all
: 显示所有连接(监听和非监听端口)。-t
或--tcp
: 仅显示 TCP 协议的连接。-u
或--udp
: 仅显示 UDP 协议的连接。-n
或--numeric
: 不将 IP 地址转换为主机名,也不将端口号转换为服务名。-l
或--listening
: 仅显示监听中的连接。-p
或--programs
: 显示与每个连接或监听端口关联的进程 ID 和进程名称。-r
或--route
: 显示路由表。-i
或--interfaces
: 显示网络接口统计信息。-s
或--statistics
: 显示协议统计数据(如 TCP 和 UDP 的统计数据)。-e
或--extend
: 显示更多的信息,如连接的生命周期和错误计数等。-b
或--broadcaster
: 显示广播地址。-v
或--verbose
: 显示更详细的输出。-x
或--unix
: 显示 Unix 域套接字。
netstat
命令的输出通常包括以下几个部分:
- Active Internet connections (servers and established): 显示当前活跃的互联网连接。
- Proto: 连接所使用的协议(如 TCP、UDP)。
- Recv-Q: 接收队列的长度。
- Send-Q: 发送队列的长度。
- Local Address: 本地地址和端口号。
- Foreign Address: 远程地址和端口号。
- State: 连接的状态(如 LISTEN、ESTABLISHED、TIME_WAIT 等)。
- PID/Program name: 关联的进程 ID 和程序名称(如果使用了
-p
选项)。
9.2 显示所有活动的网络连接 -tulnp
netstat -tulnp
查看所有活动的网络连接,这将列出所有 TCP 和 UDP 连接,以及对应的端口和进程 PID。
9.3 显示路由表信息 -r
netstat -r
这将列出系统的路由表信息。
十二、分析内核产生的信息 dmesg
dmesg
是一个 Linux 命令,用于显示或控制内核消息缓冲区。它主要用于查看系统启动时的内核日志信息,也可以用于实时监控内核事件。dmesg
提供了一个方便的方式来查看内核如何初始化硬件设备,以及在系统启动过程中发生的任何错误或警告。
dmesg [选项]
dmesg
命令支持多种选项,用于定制输出的信息。常用的选项包括:
-T
或--time
: 使用 ISO 8601 时间格式显示时间戳。-c
或--clear
: 清除内核环形缓冲区的内容。-n
或--level
: 设置消息级别,只显示指定级别及其以上级别的消息。例如0
(紧急)、1
(警报)、2
(错误)、3
(警告)、4
(通知)、5
(信息)和6
(调试)。-t
或--timestamp
: 显示带有时间戳的消息。-w
或--watch
: 监视内核环形缓冲区的变化,实时显示新消息。-x
或--hex
: 以十六进制格式显示消息。
dmesg
命令的输出通常包括以下几个部分:
- 时间戳: 显示消息的时间戳。
- 优先级: 消息的优先级级别。
- 内核模块或设备: 生成消息的内核模块或设备。
- 消息内容: 内核或设备的具体消息内容。
当你在终端中运行 dmesg
命令时,它会显示内核消息缓冲区的所有内容。这些信息通常包含硬件检测过程、驱动加载、系统启动时的错误和警告等。例如,你可能会看到类似这样的输出:
[ 0.000000] Linux version 5.15.0-1022-aws (buildd@lgw01-amd64-044) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #23-Ubuntu SMP Thu Mar 17 .jpg 20:59:59 UTC 2023 (Ubuntu 5.15.0-1022.23-generic 5.15.46)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-1022-aws root=UUID=8e6f302a-301a-451c-b52a-20553151112e ro quiet splash vt.handoff=7
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] Hygon HygonGenuine
[ 0.000000] Centaur CentaurHauls
...
12.1 dmesg | more
dmesg | more
不管是启动的时候还是系统运行过程中,只要是内核产生的信息,都会被记录到内存的某个保护区域中。dmesg这个命令就能够将该区域的信息读出来。因为信息实在太多了,所以执行时可以加入这个管道命令【| more】来使得界面暂停。
12.2 dmesg | grep -i vda
dmesg | grep -i vda
查找启动的时候,硬盘的相关信息是什么?
grep -i vda
意味着搜索不区分大小写的 "vda" 字符串。-i
标志告诉 grep
忽略字母的大小写差异。因此,dmesg | grep -i vda
将显示内核消息缓冲区中所有包含 "VDA"、"vda"、"Vda" 或 "vDa" 等字符串的行。
这条命令通常用于诊断与虚拟磁盘设备(如虚拟磁盘适配器或虚拟磁盘驱动器)相关的问题。如果你怀疑某个名为 "vda" 的设备存在问题,或者你想知道系统是如何识别和初始化它的,那么运行 dmesg | grep -i vda
可以帮助你找到答案。
十五、虚拟文件系统 /proc/*
在Linux系统中,/proc
是一个特殊且重要的文件系统,它主要用于提供关于系统和各个运行中进程的详细信息。/proc
并不是一个实际位于硬盘上的文件系统,而是由内核动态生成的一个虚拟文件系统,这意味着它不会占用任何磁盘空间,所有的数据都是直接从内核内存中获取的。这一特性使得/proc
成为了一个极其有效的工具,可用于监控系统状态、调试进程以及调整系统设置。
对于每个正在运行的进程,/proc
目录下都会有一个与之相对应的子目录,该子目录的名字即为该进程的PID(进程ID)。例如,如果有一个进程的PID为1234,则可以在/proc/1234
中找到该进程的所有相关信息。这些信息包括但不限于进程的状态、打开的文件描述符、内存映射以及环境变量等。这些目录包含了该进程的各种信息,例如:
/proc/<pid>/cmdline
包含进程的命令行参数。/proc/<pid>/status
包含进程的状态信息,如进程名、PID、PPID(父进程ID)、状态等。/proc/<pid>/stat
包含进程的统计信息,如进程启动时间、CPU 使用情况等。/proc/<pid>/maps
包含进程的内存映射信息。/proc/<pid>/mem
允许直接访问进程的内存空间(通常受到限制)。
除了进程信息之外,/proc
文件系统还提供了许多其他有用的文件和目录:
/proc/cpuinfo
提供关于 CPU 架构和特性的信息。/proc/meminfo
提供关于系统内存的统计信息,如总内存、可用内存等。/proc/filesystems
列出系统支持的文件系统类型。/proc/version
提供内核版本信息。/proc/loadavg
提供系统的负载平均值。/proc/modules
列出当前加载的内核模块。/proc/sys
提供和修改系统内核参数,如网络配置、调度策略等。
这些文件可以通过简单的cat
命令来查看内容,例如使用cat /proc/meminfo
来查看内存使用情况,或者使用cat /proc/cpuinfo
来查看CPU信息。
示例
- 要查看系统的总内存,可以执行
cat /proc/meminfo | grep MemTotal
。 - 要查看内存信息,可以执行
cat /proc/meminfo
- 要查看 CPU 信息,可以执行
cat /proc/cpuinfo
。 - 要查看某个进程的状态,可以执行
cat /proc/<pid>/status
。 - 要查看进程的内存映射信息,可以执行
cat /proc/<pid>/maps
此外,还有一些文件允许用户通过写入特定值来改变系统的行为或配置,这为系统管理和调试提供了极大的灵活性。 虽然
/proc
提供了大量的信息,但某些文件可能暴露敏感信息,因此需要谨慎使用。频繁访问/proc
文件可能会对系统性能产生轻微的影响,因为它涉及到内核态和用户态之间的切换。
十六、查看系统与内核信息 uname
uname
命令在 Linux 中用于显示有关当前运行的操作系统内核的信息。这个名字来源于 "UNix Name",因为它最初是在 Unix 系统中使用的。
uname [选项]
-a
或--all
:显示所有信息,包括内核名称、内核版本、主机名、硬件平台、操作系统名称等。-r
或--kernel-release
:显示内核版本号。-v
或--kernel-version
:显示详细的内核版本信息。-m
或--machine
:显示硬件架构(CPU 类型)。-p
或--processor
:显示处理器类型。-i
或--hardware-platform
:显示硬件平台信息。-o
或--operating-system
:显示操作系统名称。
举个例子,如果你在终端输入 uname -a
,你将会看到类似如下的输出:
Linux localhost.localdomain 5.15.0-1022-aws #23-Ubuntu SMP Thu Mar 17 .jpg 20:59:59 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
这条输出包含了以下信息:
Linux
:内核名称。localhost.localdomain
:主机名。5.15.0-1022-aws
:内核版本。#23-Ubuntu SMP Thu Mar 17 .jpg 20:59:59 UTC 2023
:内核编译日期和其他细节。x86_64
:硬件架构(64位)。GNU/Linux
:操作系统名称。
十七、查看系统启动时间与任务负载 uptime
uptime
命令在 Linux 中用于显示系统已经运行了多久、当前时间、登录用户数量、以及过去一段时间内的系统负载平均值。这对于了解系统的运行状况非常有用。
uptime [选项]
uptime
命令的选项相对较少,主要是:
-p
或--pretty
: 以更友好的格式显示系统运行时间。-s
或--since
: 显示系统启动的确切日期和时间。-r
或--pretty-seconds
: 类似于-p
,但以更详细的格式显示运行时间,包括秒数。
uptime
命令通常显示以下信息:
- 当前时间: 系统当前的时间。
- 系统运行时间: 系统已经连续运行了多少时间。
- 登录用户数量: 当前登录到系统的用户总数。
- 负载平均值: 过去 1 分钟、5 分钟和 15 分钟内的平均负载。
运行 uptime
命令可能得到这样的输出:
10:15:00 up 3 days, 2:17, 2 users, load average: 0.45, 0.56, 0.60
这里的信息可以解释为:
- 10:15:00: 当前系统时间。
- up 3 days, 2:17: 系统已经连续运行了 3 天 2 小时 17 分钟。
- 2 users: 目前有 2 个用户登录到系统。
- load average: 过去 1 分钟、5 分钟和 15 分钟内的平均负载分别为 0.45、0.56 和 0.60。