1. Linux系统状态检测概述
作为一名Linux系统管理员,我每天的工作都离不开系统状态检测命令。这些命令就像是医生的听诊器,能让我们快速了解系统的"健康状况"。在服务器运维、性能调优、故障排查等场景中,掌握这些命令是基本功。
Linux系统状态检测主要涵盖以下几个核心方面:
- CPU使用情况监控
- 内存占用分析
- 磁盘I/O和存储空间检查
- 网络连接和带宽监控
- 进程管理和资源占用统计
- 系统负载和运行时间查看
这些命令大多位于/bin、/usr/bin、/sbin等目录下,不需要额外安装,是Linux系统自带的"瑞士军刀"。接下来我将详细介绍最常用、最实用的系统状态检测命令,以及它们在实际工作中的使用技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. CPU性能监控命令
2.1 top命令:实时系统监控仪表盘
top命令是我最常用的系统监控工具,它提供了一个动态更新的实时视图,显示系统摘要信息和进程列表。启动命令很简单:
bash复制top
在top界面中,重点关注以下几行信息:
- 第一行:系统运行时间、用户数、平均负载(1/5/15分钟)
- 第三行:CPU使用情况(us用户空间、sy内核空间、ni优先级进程、id空闲、waIO等待等)
- 第四行:内存使用情况
- 第五行:交换空间使用情况
实用技巧:在top界面中按"1"可以展开显示每个CPU核心的详细使用情况,这在多核服务器上特别有用。
2.2 mpstat:多核CPU详细统计
当需要更详细的CPU统计信息时,mpstat命令是更好的选择。它属于sysstat包,可能需要先安装:
bash复制sudo apt install sysstat # Ubuntu/Debian
sudo yum install sysstat # CentOS/RHEL
使用示例:
bash复制mpstat -P ALL 1 5
这个命令会每隔1秒采样一次,共采样5次,显示所有CPU核心(-P ALL)的统计信息。
2.3 pidstat:进程级CPU监控
有时候我们需要知道具体哪个进程占用了大量CPU资源,pidstat命令可以帮我们做到这一点:
bash复制pidstat -u 1 5
这个命令会每隔1秒显示一次进程的CPU使用情况,共显示5次。
3. 内存使用情况检测
3.1 free命令:内存使用概览
free命令是查看内存使用情况的最基本工具:
bash复制free -h
使用-h参数会以人类可读的格式(GB/MB)显示内存信息。输出包括:
- total:总内存
- used:已使用内存
- free:空闲内存
- buff/cache:缓存和缓冲区使用的内存
- available:实际可用内存
注意:Linux会尽可能利用空闲内存做缓存,所以看到"free"内存很少不必惊慌,重点看"available"内存。
3.2 vmstat:虚拟内存统计
vmstat命令可以显示虚拟内存、进程、CPU活动等的统计信息:
bash复制vmstat 1 5
这个命令会每隔1秒输出一次,共输出5次。重点关注以下列:
- r:运行队列中的进程数
- b:阻塞的进程数
- swpd:使用的虚拟内存量
- free:空闲内存量
- si:从磁盘交换到内存的量
- so:从内存交换到磁盘的量
3.3 slabtop:内核slab缓存信息
对于高级用户,slabtop命令可以显示内核slab缓存的使用情况:
bash复制sudo slabtop
这个命令需要root权限,它显示了内核为各种数据结构分配的缓存情况,在内存泄漏排查时很有用。
4. 磁盘I/O和存储监控
4.1 df命令:磁盘空间使用情况
df命令是最常用的磁盘空间检查工具:
bash复制df -h
-h参数表示以人类可读格式显示。输出包括:
- 文件系统
- 总大小
- 已用空间
- 可用空间
- 使用百分比
- 挂载点
实用技巧:df -hT还会显示文件系统类型,这在排查挂载问题时很有帮助。
4.2 du命令:目录空间占用
要查看特定目录占用了多少空间,可以使用du命令:
bash复制du -sh /var/log/
-s参数表示只显示总计,-h表示人类可读格式。这个命令会显示/var/log/目录的总大小。
4.3 iostat:磁盘I/O统计
iostat命令(也属于sysstat包)可以监控磁盘I/O性能:
bash复制iostat -dx 1 5
这个命令会每隔1秒显示一次磁盘I/O统计,共显示5次。重点关注:
- %util:设备利用率(接近100%表示磁盘饱和)
- await:平均I/O等待时间
- svctm:平均服务时间
5. 网络连接监控
5.1 netstat/ss命令:网络连接查看
netstat是传统的网络连接查看工具,但在新系统中逐渐被ss命令取代:
bash复制ss -tulnp
这个命令显示:
- -t:TCP连接
- -u:UDP连接
- -l:监听中的端口
- -n:以数字形式显示地址和端口
- -p:显示相关进程
5.2 iftop:实时带宽监控
iftop可以实时显示网络带宽使用情况:
bash复制sudo iftop -i eth0
这个命令需要root权限,它会显示指定接口(如eth0)上各个连接的实时流量。
5.3 nethogs:按进程统计网络流量
nethogs可以按进程显示网络带宽使用情况:
bash复制sudo nethogs eth0
这在找出哪个进程占用了大量带宽时特别有用。
6. 进程管理和系统负载
6.1 ps命令:进程查看
ps命令是查看进程信息的基本工具:
bash复制ps aux
常用组合:
- ps aux:显示所有用户的进程
- ps -ef:完整格式列表
- ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu:按CPU使用率排序
6.2 lsof:列出打开的文件
lsof命令可以列出被进程打开的文件:
bash复制sudo lsof -i :80
这个例子会显示所有打开80端口的进程,在排查端口冲突时很有用。
6.3 uptime:系统负载查看
uptime命令可以快速查看系统运行时间和平均负载:
bash复制uptime
输出示例:
code复制10:30:45 up 15 days, 3:22, 2 users, load average: 0.15, 0.10, 0.05
其中load average的三个数字分别代表1分钟、5分钟和15分钟的平均负载。
7. 高级系统状态检测工具
7.1 dstat:全能系统资源统计工具
dstat是一个功能强大的替代工具,可以同时监控CPU、磁盘、网络等多种资源:
bash复制dstat -cdngy 1
这个命令会每秒刷新一次,显示CPU、磁盘、网络、分页和系统统计信息。
7.2 glances:更友好的监控界面
glances是一个基于Python开发的跨平台系统监控工具:
bash复制sudo apt install glances # 安装
glances
它提供了一个彩色的、更友好的界面,同时监控CPU、内存、磁盘、网络、进程等。
7.3 sar:系统活动报告
sar命令可以收集、报告和保存系统活动信息:
bash复制sar -u 1 5 # CPU使用率
sar -r 1 5 # 内存使用情况
sar -b 1 5 # I/O和传输速率
sar的优势在于它可以配置为定期收集系统数据,便于后期分析。
8. 实战经验与技巧分享
在实际工作中,我发现以下几个组合命令特别实用:
- 快速系统健康检查:
bash复制echo "----Uptime----"; uptime; echo "----Memory----"; free -h; echo "----Disk----"; df -h; echo "----Top Processes----"; ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 6
- 找出内存占用最高的进程:
bash复制ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 6
- 监控特定进程的资源使用:
bash复制pidstat -p <PID> 1 5
- 排查磁盘I/O瓶颈:
bash复制iostat -dx 1 5 & vmstat 1 5
- 网络连接统计:
bash复制ss -s
对于长期监控,我建议配置以下工具:
- 启用sysstat收集历史数据(编辑/etc/default/sysstat)
- 使用Prometheus + Grafana搭建可视化监控平台
- 对关键指标设置告警阈值
在性能分析时,要注意命令输出的相互关系。例如,如果top显示CPU的wa(IO等待)很高,就应该用iostat检查磁盘I/O;如果free显示内存不足,就要用ps检查哪些进程占用了大量内存。
最后分享一个常见误区:很多新手看到free命令显示内存几乎用光就认为系统内存不足,实际上Linux会充分利用空闲内存做缓存(buffer/cache),真正应该关注的是"available"内存。这也是为什么在生产环境中,我更喜欢使用free -h命令而不是简单的free。
