【Linux日新月异(八)】CentOS 7系统资源监控与排查深度指南:性能调优全景图
🌌提供:
1. Kimi K2 Thinking(网站: 大语言模型(Large Language Model, LLM),是当前人工智能领域的重要技术分支,专注于自然语言处理和生成任务。)【开源】「AL」〖✿✿✿✿✿〗
🔔说明: 本文内容由Kimi K2生成。AI创作虽经校对,仍难免疏漏或偏颇之处。若您发现错漏、或有任何建议,恳请不吝赐教。您的每一次指正,都是我改进与成长的重要指引。
📓摘要:
略...(有好建议的可以留言哦~~~(✿◕‿◕✿))
📊 CentOS 7系统资源监控与排查深度指南:性能调优全景图
系统监控是运维的"听诊器",CentOS 7提供了从基础到专业的完整监控工具链。掌握这些命令,能在问题爆发前发现征兆,在故障发生后快速定位!
一、🔥 系统整体状态监控
1. uptime- 快速查看系统负载
语法:
uptime [选项]
案例:
uptime
# 输出:
# 15:30:45 up 5 days, 8:20, 3 users, load average: 2.15, 1.80, 1.45# 更简洁的显示
uptime -p
# 输出:up 5 days, 8 hours, 20 minutes
输出解析:
15:30:45:当前时间up 5 days, 8:20:运行时长3 users:登录用户数load average:核心指标!2.15:最近1分钟平均负载1.80:最近5分钟平均负载1.45:最近15分钟平均负载
负载解读(假设4核CPU) :
< 4.0:系统正常运行4.0 ~ 8.0:系统繁忙,但可接受> 8.0:严重过载,需要立即排查!
⚠️ 注意事项:
- 🔥负载≠CPU使用率:负载包含运行中+等待I/O的进程数
- 多核考虑:负载应除以CPU核心数。
nproc或lscpu查看核心数 - 上升趋势:如果1分钟负载远高于15分钟,说明负载正在上升
- I/O等待:高负载但CPU空闲,说明是磁盘或网络瓶颈
2. dmesg- 内核环缓冲区(硬件/驱动故障)
语法:
dmesg [选项]
核心选项:
-H:人类可读,带时间戳-T:显示绝对时间-c:清除缓冲区-l 级别:过滤级别(emerg,alert,crit,err,warn,info)--follow:实时追踪
案例1:查看硬件检测信息
dmesg | grep -i eth
# 查看网卡识别dmesg | grep -i memory
# 查看内存识别dmesg | grep -i usb
# 查看USB设备
案例2:查看错误信息
# 只显示错误和警告
dmesg -l err,warn# 显示时间戳(重要!)
dmesg -T | grep -i error# 输出示例:
[Thu Nov 14 15:30:45 2024] EXT4-fs error (device sda1): ext4_lookup: deleted inode referenced: 12345
# 说明文件系统出现错误!需fsck检查
案例3:实时监控硬件故障
# 监控磁盘I/O错误
dmesg --follow | grep -i "i/o error"
# 出现该错误说明磁盘即将损坏!
⚠️ 注意事项:
- 🔥时区问题:
dmesg -T显示的时间可能有时区偏差,需校准 - 缓冲区大小:dmesg缓冲区有限,重启后清空,重要错误需及时保存
- 权限:普通用户可查看,但某些敏感信息需root
- 与journalctl关系:CentOS 7中
journalctl -k功能类似,但更全面
3. dmidecode - 硬件信息查询
语法:
dmidecode [选项]
核心选项:
-t 类型:指定类型(bios, system, processor, memory)-s 关键字:直接输出关键字值
案例1:查看内存信息
# 查看内存条数量和容量
dmidecode -t memory | grep -i size
# 输出:
# Size: 8192 MB
# Size: 8192 MB
# 说明有两条8GB内存# 查看内存槽位
dmidecode -t memory | grep -i "locator"
# 输出:
# Locator: DIMM_A1
# Locator: DIMM_A2
案例2:查看CPU信息
# 查看CPU型号
dmidecode -t processor | grep -i "version"
# 输出:Version: Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz# 查看CPU核心数
dmidecode -t processor | grep -i "core"
# 输出:Core Count: 12
案例3:查看服务器序列号
# 查看制造商和序列号(资产管理)
dmidecode -t system | grep -E "Manufacturer|Serial Number"
# 输出:
# Manufacturer: Dell Inc.
# Serial Number: 8XYZ123
⚠️ 注意事项:
- 🔥需root权限:普通用户无法读取DMI信息
- 虚拟机限制:虚拟机信息可能不完整或显示宿主机信息
- 准确性:信息来自BIOS,如果BIOS有bug可能不准确
- 与lshw区别:
lshw信息更详细,但需要安装
二、⚡ CPU资源监控
1. top- 动态CPU监控(前面已讲,补充CPU视角)
案例:CPU视角分析
top - 16:45:30 up 5 days, 9:35, 3 users, load average: 3.50, 2.80, 2.10
Tasks: 215 total, 3 running, 212 sleeping, 0 stopped, 0 zombie
%Cpu(s): 25.0 us, 15.0 sy, 0.0 ni, 58.0 id, 2.0 wa, 0.0 hi, 0.0 si, 0.0 st# CPU解读:
# us(25%) + sy(15%) = 应用+内核占用40%(正常)
# id(58%) = 空闲58%
# wa(2%) = I/O等待2%(轻微)
交互命令:
1:显示每颗CPU核心(排查单核瓶颈)P:按CPU排序H:显示线程c:显示完整命令路径
⚠️ 高CPU排查流程:
# 1. top找到高CPU进程
# 假设PID 5678占用150% CPU(多核)# 2. 查看进程线程
ps -Lp 5678 -o pid,tid,pcpu,comm
# 找到具体哪个线程(TID)占用高# 3. 查看进程打开的文件和调用
lsof -p 5678
strace -p 5678 -c # 统计系统调用# 4. 找到代码位置(Java示例)
jstack 5678 | grep <TID的十六进制># 5. 生成火焰图(高级)
perf record -F 99 -p 5678 -g -- sleep 60
perf script | flamegraph.pl > cpu.svg
2. mpstat- 多核CPU统计
安装:
yum install -y sysstat
语法:
mpstat [选项] [间隔] [次数]
案例:
# 查看每颗CPU统计
mpstat -P ALL 1 3
# 每秒刷新,共3次# 输出:
Linux 3.10.0-1160.el7.x86_64 (centos7) 11/15/2024 _x86_64_ (4 CPU)04:50:12 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
04:50:13 PM all 25.12 0.00 15.06 2.01 0.00 0.00 0.00 0.00 0.00 57.81
04:50:13 PM 0 30.00 0.00 20.00 5.00 0.00 0.00 0.00 0.00 0.00 45.00
04:50:13 PM 1 20.00 0.00 10.00 1.00 0.00 0.00 0.00 0.00 0.00 69.00
04:50:13 PM 2 35.00 0.00 18.00 1.00 0.00 0.00 0.00 0.00 0.00 46.00
04:50:13 PM 3 15.00 0.00 12.00 1.00 0.00 0.00 0.00 0.00 0.00 72.00
⚠️ 单核瓶颈识别:
- 🔥某CPU idle持续<10%:该核过载,进程绑定不均
- 软中断不均衡:网卡等多队列未开启,导致单核处理所有中断
- 解决方案:启用RPS/RFS或绑定进程到特定CPU
3. pidstat - 进程级CPU统计
安装:
yum install -y sysstat
语法:
pidstat [选项] [间隔] [次数]
核心选项:
-u:CPU统计-r:内存统计-d:I/O统计-t:线程级统计-p PID:指定进程
案例:
# 监控所有进程CPU(每秒刷新)
pidstat -u 1# 输出:
Linux 3.10.0-1160.el7.x86_64 (centos7) 11/15/2024 _x86_64_ (4 CPU)05:00:12 PM UID PID %usr %system %guest %CPU CPU Command
05:00:13 PM 0 1234 5.00 2.00 0.00 7.00 2 nginx
05:00:13 PM 0 5678 85.00 15.00 0.00 100.00 1 java# 高亮:java进程占满1核CPU(100%)
⚠️ 注意事项:
- 🔥线程级分析:
pidstat -t -p 5678 1可定位具体哪个线程 - 综合监控:
pidstat -urd 1同时看CPU、内存、I/O - 采样间隔:生产环境建议≥5秒,避免监控本身影响性能
4. perf - 性能分析神器(Linux Profiling)
安装:
yum install -y perf
案例1:CPU周期采样
# 采样10秒
perf record -F 99 -a -g -- sleep 10# 生成报告
perf report
案例2:针对进程分析
# 分析Java进程5678的CPU热点
perf record -F 99 -p 5678 -g -- sleep 30# 查看热点函数
perf report --no-children
# 可看到是哪些函数占用CPU
⚠️ 注意事项:
- 🔥需要内核调试符号:否则只看到16进制地址
- 性能开销:采样频率过高会影响生产环境,建议
-F 99(99Hz) - 生成火焰图:需要安装
flamegraph工具 - 权限:普通用户只能分析自己的进程,root可分析所有
三、💾 内存资源监控
1. free- 内存使用情况
语法:
free [选项]
核心选项:
-h:人类可读-m:MB单位-g:GB单位-t:显示总计
案例:
free -h
# 输出:
# total used free shared buff/cache available
# Mem: 7.6G 2.1G 1.2G 136M 4.3G 5.2G
# Swap: 2.0G 0B 2.0G# 重要指标解读:
# - used:已使用(包含缓存,不反映真实占用)
# - free:完全空闲
# - buff/cache:缓存(可回收,不属于真实占用)
# - available:真正可用内存(近似free+buff/cache)
# - Swap used:swap使用量(>0说明内存不足)
⚠️ 内存不足判断标准:
- 🔥available < 500MB:内存紧张
- Swap used持续增长:内存泄漏或不足
- 内存回收慢:
echo 3 > /proc/sys/vm/drop_caches手动清理缓存(临时)
2. vmstat- 虚拟内存统计(含进程/CPU/IO)
案例(间隔1秒,共5次):
vmstat 1 5
# 输出:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpd free buff cache si so bi bo in cs us sy id wa st2 0 0 123456 23456 4567890 0 0 10 20 50 100 5 2 90 3 03 1 0 122000 23500 4568000 0 0 500 2000 100 200 10 5 70 15 0
关键字段:
si/so:swap换入/换出(⚠️>0说明内存不足)bi/bo:块设备读/写(磁盘I/O)wa:CPU等待I/O时间(>10%说明I/O瓶颈)
⚠️ 内存泄漏排查:
# 持续监控,观察free和cache变化
for i in {1..60}; doecho "=== $(date) ==="vmstat -s | grep -E "used memory|swap"sleep 60
done# 找到占用内存增长的进程
pidstat -r -p 5678 1
# 观察RSS(常驻内存)是否持续增加
3. smem - 内存使用分析(Proportional Set Size)
安装:
yum install -y smem
案例:
# 查看进程真实内存占用(共享内存按比例分配)
smem -s pss
# 输出:PID User Command Swap USS PSS RSS1234 root nginx: worker process 0 2.1M 2.5M 4.2M5678 root java -jar app.jar 0 1.2G 1.3G 1.5G# PSS更准确地反映进程真实占用(考虑共享库)
4. pmap - 进程内存映射
语法:
pmap [选项] PID
案例:
pmap 5678
# 输出:
5678: java -jar app.jar
0000000000400000 884K r-x-- java
00000000007dc000 8K r---- java
...
00007f8e44000000 65536K rw--- [ anon ] # 匿名内存(堆栈)
00007f8e48000000 131072K rw--- [ anon ]
...
total 1572864K # 总映射1.5GB
⚠️ 内存映射分析:
- [ anon ]:匿名内存,通常是堆和栈,重点关注
- [ stack ]:线程栈,线程越多越大
- libc-2.17.so:共享库,不计入进程独占内存
5. sar - 系统活动报告(历史数据)
安装:
yum install -y sysstat
systemctl enable --now sysstat
语法:
sar [选项] [间隔] [次数]
核心选项:
-u:CPU-r:内存-b:I/O-n DEV:网络接口-f /var/log/sa/saXX:查看历史数据
案例1:查看历史CPU数据
# 查看今天的CPU数据(每10分钟采样)
sar -u -f /var/log/sa/sa15
# sa15表示15号的数据# 输出:
Linux 3.10.0-1160.el7.x86_64 (centos7) 11/15/2024 _x86_64_ (4 CPU)12:00:01 AM CPU %user %nice %system %iowait %steal %idle
12:10:01 AM all 5.00 0.00 2.00 1.00 0.00 92.00
12:20:01 AM all 80.00 0.00 15.00 5.00 0.00 0.00
# 12:20的idle=0%,说明当时CPU跑满!
案例2:查看历史内存数据
sar -r -f /var/log/sa/sa15
# 关注%memused和%swapused
⚠️ sar配置:
# 修改采集频率(默认10分钟太粗)
nano /etc/cron.d/sysstat
# 改为每1分钟
*/1 * * * * root /usr/lib64/sa/sa1 1 1# 保留90天数据
nano /etc/sysconfig/sysstat
# HISTORY=90
⚠️ 注意事项:
- 🔥历史回溯:sar是唯一能看到历史性能数据的工具,故障后复盘必备
- 采样精度:生产环境建议1-5分钟,避免数据太粗漏掉峰值
- 磁盘空间:高频采集会占用更多磁盘,监控
/var/log/sa/大小
四、🌐 网络资源监控
1. ss- 现代网络连接查看(替代netstat)
语法:
ss [选项] [过滤]
核心选项:
-t:TCP-u:UDP-n:不解析服务名(显示端口号)-l:监听套接字-p:显示进程信息(需root)-a:所有套接字-m:内存使用-i:内部信息
案例1:查看监听端口
ss -tuln
# 输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:8080 *:*
LISTEN 0 128 [::]:80 [::]:* # 快速查看端口是否被占用
ss -tuln | grep :8080
案例2:查看ESTABLISHED连接
ss -tn state established
# 或
ss -tn | grep ESTAB# 统计连接数
ss -tn state established | wc -l# 查看每个IP的连接数
ss -tn state established | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
⚠️ 大量连接排查:
# 1. 查看总连接数
ss -tn | wc -l# 2. 查看TIME_WAIT(过多会占用端口)
ss -tn state time-wait | wc -l# 3. 查看CLOSE_WAIT(程序bug导致连接不释放)
ss -tn state close-wait | wc -l# 4. 查看进程持有的连接
ss -tnp | grep 5678
# -p显示PID和进程名
2. iptraf-ng / iftop - 实时网络流量
安装:
yum install -y iptraf-ng iftop
案例1:iftop查看实时流量
iftop -i eth0
# 界面显示:
# 源IP -> 目的IP 实时速率 峰值 总量
# 192.168.1.100 => 8.8.8.8 1.2Mb 2.3Mb 15.6MB
⚠️ 参数:
-n:不解析主机名(更快)-P:显示端口-B:字节为单位
案例2:iptraf-ng交互式监控
iptraf-ng
# 菜单选择:
# 1. IP traffic monitor(按IP统计)
# 2. General interface statistics(接口统计)
# 3. Detailed interface statistics(详细统计)
⚠️ 注意事项:
- 🔥需要root:
iftop/iptraf-ng需root权限抓包 - 性能影响 :高流量时iftop本身消耗CPU,生产环境慎用
- 端口镜像:如需抓其他服务器流量,需交换机端口镜像
3. sar -n- 网络历史数据
# 查看今天网络流量历史
sar -n DEV -f /var/log/sa/sa15# 输出:
12:00:01 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
12:10:01 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:10:01 AM eth0 100.50 80.30 12.30 15.20 0.00 0.00 0.00# 关键指标:
# rxpck/s: 每秒接收包数
# txpck/s: 每秒发送包数
# rxkB/s: 每秒接收KB数
# txkB/s: 每秒发送KB数
4. netstat - 传统网络统计(已废弃)
# 虽然废弃但仍广泛使用
netstat -tuln
netstat -tn | grep ESTABLISHED
五、🐛 日志分析神器
1. journalctl- systemd日志管理 ⭐⭐
语法:
journalctl [选项] [匹配]
核心选项:
-f:实时追踪(tail -f)-u 单元:查看服务日志-p 级别:按优先级过滤(0=emerg, 4=warning, 6=info)--since "时间":从何时开始--until "时间":到何时结束-n 行数:最近N行-o verbose:详细输出(含所有字段)-k:内核日志(代替dmesg)
案例1:查看服务日志
# 查看nginx日志(推荐!)
journalctl -u nginx.service# 查看最近100行
journalctl -u nginx.service -n 100# 实时追踪
journalctl -u nginx.service -f# 查看今天的日志
journalctl -u nginx.service --since today
案例2:按时间过滤
# 查看过去1小时
journalctl --since "1 hour ago"# 查看特定时间段
journalctl --since "2024-11-15 14:00:00" --until "2024-11-15 15:00:00"# 查看系统启动后的日志
journalctl --since "2024-11-15 09:30:00"
案例3:筛选错误日志
# 只显示错误及以上级别
journalctl -p err# 查看内核错误
journalctl -k -p err# 组合:nginx的错误日志
journalctl -u nginx.service -p err --since today
案例4:跟踪进程日志
# 查看PID为5678的进程日志
journalctl _PID=5678# 查看用户操作
journalctl _UID=1000
⚠️ 日志管理配置:
# 配置日志保留(避免占满磁盘)
nano /etc/systemd/journald.conf# 关键参数:
SystemMaxUse=5G # 日志最大占用5GB
MaxFileSec=30day # 单个文件最多30天
ForwardToSyslog=no # 不转发到syslog(避免重复)# 重启服务
systemctl restart systemd-journald# 清理旧日志
journalctl --vacuum-size=2G # 保留最近2GB
journalctl --vacuum-time=7d # 保留最近7天
⚠️ 注意事项:
- 🔥日志持久化:默认日志在内存(
/run/log),重启丢失。需配置Storage=persistent到/var/log/journal - 二进制存储:journalctl日志是二进制,不能直接用cat查看
- 性能:高频日志写入可能占满磁盘,务必配置上限
- 与rsyslog关系:CentOS 7中rsyslog和journald并存,可配置互转
2. rsyslog 传统日志(/var/log/)
核心日志文件:
| 文件 | 用途 |
|---|---|
/var/log/messages | 系统通用日志 |
/var/log/secure | 安全日志(SSH登录等) |
/var/log/cron | 定时任务日志 |
/var/log/boot.log | 启动日志 |
/var/log/dmesg | 内核日志 |
/var/log/maillog | 邮件日志 |
案例:ssh爆破排查
# 查看失败登录
grep "Failed password" /var/log/secure# 统计IP
grep "Failed password" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -rn | head -20# 查看成功登录(潜在入侵)
grep "Accepted password" /var/log/secure
3. logrotate - 日志轮转管理
配置:
# 查看配置
nano /etc/logrotate.conf# 示例:自定义nginx日志轮转
nano /etc/logrotate.d/nginx
# /var/log/nginx/*.log {
# daily
# missingok
# rotate 52
# compress
# delaycompress
# notifempty
# create 640 nginx adm
# postrotate
# /bin/kill -USR1 $(cat /run/nginx.pid)
# endscript
# }
手动触发轮转:
logrotate -f /etc/logrotate.d/nginx
# -f: force
六、🛠️ 综合故障排查案例
案例1:系统响应慢,SSH卡顿
排查步骤:
# 1. 查看负载
uptime
# load average: 15.0, 10.0, 5.0 (4核CPU,严重过载)# 2. top看CPU
top -b -n 1 | head -20
# 发现wa=60% (I/O等待!)# 3. vmstat确认
vmstat 1 5
# wa列持续50-70%,bi/bo很大# 4. iostat找磁盘
iostat -x 1
# sda的%util=99.9%,await=200ms(磁盘瓶颈!)# 5. 找进程
iotop -o
# 发现mysql进程占I/O 80%# 6. 查mysql
journalctl -u mysqld -p err
# 大量 "InnoDB: Deadlock found..." 死锁# 结论:MySQL死锁导致磁盘I/O暴增
# 解决:kill长事务,优化SQL
案例2:内存耗尽,OOM Killer触发
排查步骤:
# 1. dmesg查看OOM日志
dmesg -T | grep -i "out of memory"
# 输出:
[Thu Nov 14 16:00:00 2024] Out of memory: Kill process 5678 (java) score 882 or sacrifice child# 2. 查看OOM前的内存
sar -r -f /var/log/sa/sa14
# %memused 从80%直线上升到99%# 3. 查看进程占用
ps aux --sort=-%mem | head -10
# java进程RSS=6GB,系统内存8GB# 4. 查看内存泄漏
pmap -x 5678 | tail -1
# total kB 6291456(持续增长)# 5. 检查jvm参数
ps -ef | grep java
# -Xmx8g,但系统只有8GB,留不足!# 结论:JVM堆配置过大+内存泄漏
# 解决:调小-Xmx,修复代码泄漏
案例3:网络连接数暴增,服务无法响应
排查步骤:
# 1. 查看连接数
ss -tn | wc -l
# 10000+(正常应<1000)# 2. 查看TIME_WAIT
ss -tn state time-wait | wc -l
# 8000+(连接未快速回收)# 3. 查看端口监听
ss -tuln | grep :8080
# Recv-Q=128(队列满)# 4. 查看进程FD限制
cat /proc/5678/limits | grep "Max open files"
# Max open files 1024 1024 files
# 限制太小!# 5. 查看系统级限制
sysctl fs.file-max
# fs.file-max = 100000(够用)# 6. 查看TCP参数
sysctl net.ipv4.tcp_tw_reuse
# net.ipv4.tcp_tw_reuse = 0(未开启复用)# 结论:FD限制+TIME_WAIT未复用
# 解决:
# 1. ulimit -n 65535
# 2. sysctl -w net.ipv4.tcp_tw_reuse=1
# 3. 修改应用连接池配置
七、⚠️ 监控铁律与最佳实践
1. 🔥 监控的"3-3-3"原则
- 3秒:突发问题3秒内发现(
dmesg -w实时) - 3分钟:定位到进程和原因(
top+ss+journalctl) - 30分钟:解决问题或止损(
kill/systemctl restart)
2. 🔥 监控工具选择矩阵
| 场景 | 推荐工具 | 备选工具 | 避免使用 |
|---|---|---|---|
| CPU瞬时高 | top + pidstat | htop | ps aux(静态) |
| CPU历史 | sar -u | perf | vmstat(粗略) |
| 内存泄漏 | pmap + pidstat -r | smem | free(整体) |
| 内存历史 | sar -r | vmstat | top(不准确) |
| 磁盘I/O | iostat -x | iotop | du(无关) |
| 网络连接 | ss -tnp | iftop | netstat(废弃) |
| 网络历史 | sar -n DEV | iptables | ifconfig(过时) |
| 日志实时 | journalctl -f | tail -f | cat(低效) |
| 日志历史 | journalctl --since | grep | vim(大文件卡死) |
3. 🔥 生产环境监控禁忌
- 禁止生产环境运行
perf record -F 9999:高频采样导致系统卡顿 - 禁止
tail -f /var/log/xxx | grep xxx监控:占用大量内存(管道缓冲) - 禁止高频
lsof:遍历所有进程文件句柄,性能差 - 禁止
du -h /定时任务:每次扫描全盘,I/O风暴
4. 🔥 监控脚本最佳实践
#!/bin/bash
# 健康检查脚本示例# 1. 设置超时(避免卡死)
timeout 5 ss -tn > /tmp/conn.txt# 2. 使用ss代替netstat
CONN=$(wc -l < /tmp/conn.txt)# 3. 阈值判断
if [ $CONN -gt 5000 ]; then# 4. 记录关键信息echo "$(date): Connection spike: $CONN" >> /var/log/health.logss -tn state time-wait | wc -l >> /var/log/health.log# 5. 触发告警echo "High connections on $(hostname)" | mail -s "Alert" admin@example.com
fi# 6. 清理临时文件
rm -f /tmp/conn.txt
八、📚 终极排查流程图
用户反馈:系统慢/无响应↓uptime (load average)↓top (CPU/内存/进程)↓vmstat (wa/memory/swap)↓iostat (磁盘I/O瓶颈)↓ss/netstat (网络连接)↓journalctl/dmesg (错误日志)↓定位到具体进程 (PID)↓strace/lsof/pmap (进程详情)↓确定根本原因 (代码/配置/资源)↓制定解决方案
🎓 总结:监控排查的"三字经"
- 看整体:
uptime+vmstat判断问题类型(CPU/内存/IO/网络) - 抓进程:
top+pidstat定位元凶PID - 查细节:
strace+lsof+pmap分析进程行为 - 翻旧账:
sar+journalctl追溯历史 - 定方案:根据证据修复,而非猜测
记住:监控是预防医学,排查是急诊手术。建立完善的监控体系,远胜于救火式的排查!
📖原文: 聚散离合,乃是缘分,苦情巨树续的是缘,而有缘,未必有分。 --《狐妖小狐娘》
⌛怡然: ...
