在 Linux 系统中查看 8vCPU、32GB 服务器的实际资源使用情况,可以通过以下常用命令和工具实现。以下是分场景的实用方法:
一、CPU 使用情况
1. top 或 htop(实时动态监控)
top -d 1 # 每1秒刷新一次
# 或安装后使用 htop(更友好)
sudo apt install htop # Debian/Ubuntu
yum install htop # CentOS/RHEL
htop
- 关注:
%Cpu(s)行中的us(用户态)、sy(内核态)、id(空闲)、wa(IO等待) - 按
F6可排序,按P按 CPU 使用率排序进程
2. mpstat(来自 sysstat 包,统计历史/实时 CPU 细分)
sudo apt install sysstat # 或 yum install sysstat
mpstat -P ALL 1 # 每秒刷新,显示每个 CPU 核心使用情况
- 输出中
usr+sys+nice+iowait≈ 总占用;idle为空闲比例 - 对于 8 核机器,若某核长期 >90%,说明负载不均或存在瓶颈
3. vmstat(综合视图)
vmstat 1
- 关注
r(运行队列长度)、b(阻塞进程数)、si/so(交换活动)
二、内存使用情况
1. free -h(简洁版)
free -h
示例输出解读:
total used free shared buff/cache available
Mem: 32G 4.5G 12G 200M 15.5G 27G ← 可用内存
Swap: 2G 0B 2G
- 关键点:看
available而非free!系统会复用缓存,真正可用的内存是available - 若
used + cache接近 32G 但available仍高,属正常现象
2. smem(更精确的进程级内存分析,含 PSS/USS)
sudo apt install smem # 或从源码编译
smem -k | head -20 # 按 RSS 排序前20进程
smem -t # 表格格式汇总
USS(Unique Set Size):进程独占内存PSS(Proportional Set Size):含共享页分摊,更接近真实开销
3. /proc/meminfo(底层数据源)
grep -E 'MemTotal|MemFree|MemAvailable|Cached|Slab' /proc/meminfo
三、磁盘 I/O 与网络
1. iostat(磁盘读写性能)
sudo apt install iotop sysstat
iostat -x 1 # 每秒刷新,显示 %util(利用率)、await(平均等待时间)
iotop -o # 实时显示哪些进程在做 IO(需 root)
%util> 80% 表示磁盘可能成为瓶颈await高说明响应延迟大
2. sar(历史趋势分析,需启用 sysstat 记录)
# 查看今日 CPU/内存/IO 历史记录
sar -u 1 5 # 每5秒采一次,共5次
sar -r # 内存历史
sar -b # 网络/IO 历史
⚠️ 默认
sysstat不自动记录,需编辑/etc/default/sysstat设置ENABLED="true"并重启服务
3. iftop / nethogs(网络流量)
sudo apt install iftop nethogs
iftop # 实时带宽监控
nethogs # 按进程显示网络占用
四、进阶:容器/虚拟化环境注意事项
- 若是 KVM/QEMU 虚拟机:宿主机限制可能影响表现。用
virsh domstats <vm-name>或virt-top查看虚拟资源配额 - 若是 Docker/K8s 容器:
docker stats --no-stream # 所有容器资源 kubectl top pod --all-namespaces # K8s 节点资源 - 检查 cgroup 限制:
cat /sys/fs/cgroup/cpu,cpuacct/cpu.cfs_quota_us cat /sys/fs/cgroup/memory/memory.limit_in_bytes
五、一键诊断脚本(推荐保存为 check-server.sh)
#!/bin/bash
echo "=== CPU (last 10s avg) ==="
mpstat -P ALL 1 10 | tail -1
echo -e "n=== Memory ==="
free -h
echo -e "n=== Top 5 Memory Processes ==="
ps aux --sort=-%mem | head -6
echo -e "n=== Disk I/O (last 5s) ==="
iostat -x 1 5 | tail -10
echo -e "n=== Swap Activity ==="
vmstat 1 5 | grep -A1 "^procs|^swap"
赋予执行权限:chmod +x check-server.sh && ./check-server.sh
如你有具体场景(例如:应用卡顿、数据库慢查询、批量任务堆积),我可进一步针对性分析日志或调优建议。需要吗?
PHPWP博客