服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-09-09 更新于 2026-09-09 简米科技 3,569 字 8 分钟阅读

CPU和内存监控指标分别看哪些数据,服务器性能优化必看哪些关键参数?

导读监控CPU和内存,核心看两类数据:CPU的使用率、负载和排队情况,内存的容量余量、回收和交换活动, 具体看哪些指标,不是丢给你一个top就完事,而是要分场景、分维度去判断瓶颈到底卡在哪,下面我把这套逻辑拆开讲透,CPU监控指标到底看哪些数据CPU监控指标有很多,但真正需要每天盯着看的,其实不超过五个,其余那些千……

监控CPU和内存,核心看两类数据:CPU的使用率、负载和排队情况,内存的容量余量、回收和交换活动。 具体看哪些指标,不是丢给你一个top就完事,而是要分场景、分维度去判断瓶颈到底卡在哪,下面我把这套逻辑拆开讲透。

CPU监控指标到底看哪些数据

CPU监控指标有很多,但真正需要每天盯着看的,其实不超过五个,其余那些千奇百怪的计数器,大多是排查深层次问题时才用得上。

使用率不是唯一答案,还要看负载和队列

很多人习惯性只看一个“CPU使用率”,高了就说CPU满,低了就说没事,这个判断太粗糙,先看使用率,但要拆成用户态、系统态、I/O等待三块,用户态高说明正在算东西,系统态高说明内核在忙,可能是系统调用频繁或进程调度太猛,I/O等待高则要另说,这往往不是CPU的问题,而是磁盘拖了后腿。

然后看负载平均值,也就是load average,这个数务必结合CPU核数来读,行业共识认为,负载值持续大于机器核数的数倍,才算真正的过载,但负载高不等于CPU忙,因为不可中断睡眠的进程也会算进负载里,如果你看到load飙高而CPU使用率很低,先查有没有大量I/O卡住的进程。

每个核的利用率比总利用率更诚实

多核机器里,整体使用率40%不代表没有瓶颈,一个四核机器,如果只有一个核被占满,总使用率只有25%,但应用可能已经卡出天际了,所以要监控每个CPU核心的使用率,用mpstat -P ALL就能看到单核状况,这一步能帮你发现那些“只吃一个核”的单线程程序。

上下文切换和中断是隐藏信号

上下文切换每秒次数,以及软中断、硬中断占用的CPU时间,在低延时服务里非常关键,如果你用vmstat观察,cs列的数字如果动辄几万甚至几十万,说明系统里的线程和进程在疯狂抢占调度,真正的业务计算反而拿不到时间片,软中断高通常和网络收发有关,大流量时经常看到某一个核被软中断打满,其他核闲着。

内存监控指标怎么看才靠谱

内存监控的坑比CPU更多,很多人的第一反应是看“还有多少空闲内存”,但Linux下的free命令里,那个free列常常可怜兮兮,而buff/cache却大得吓人,这并不代表内存不够。

CPU和内存监控指标分别看哪些数据,服务器性能优化必看哪些关键参数?

可用内存比已用内存更有参考价值

Linux内存管理的原则是“闲着也是闲着,不如拿来缓存”,所以buff/cache占得多,恰恰说明系统在积极提升I/O性能,真正要盯的是available这一列,它是衡量当前还有多少内存可以随时分给应用的指标,只要available没有持续见底,就不用慌。

交换分区和内存回收驱动要重点盯

swap的变化是内存短缺的硬信号,看vmstat输出里的si和so两个数字,分别表示从磁盘换入和换出到磁盘的流量,当这两个数字持续非零,说明物理内存已经不够用,系统沦落到靠磁盘扮演临时内存,性能会肉眼可见地崩塌。

另一个容易被忽略的是缺页中断,尤其是major page fault,进程访问的页不在物理内存里,需要从磁盘读,这种缺页代价极高,可以用pidstat -r或者perf去查,当你发现应用的周转时间变慢,而内存使用率并不高时,多看看这个字段。

内存带宽和延迟什么时候需要关注

普通业务场景很少直接看内存带宽,因为系统瓶颈通常出现在容量不足上,但如果你跑的是大规模科学计算、视频编解码或高频交易,那么内存带宽和NUMA跨节点访问延迟就很重要了,这类场景下,可以看numastat或Intel PCM工具,确认内存是不是真的跑在满速,对于大多数运维和开发来说,内存监控做到容量、swap、缺页这三层就足够了。

不同场景下CPU和内存监控重点完全不同

同样是看使用率,nginx反向代理和MySQL数据库的关注点差异极大,下面说两个最常见的场景。

高并发Web服务器的监控侧重

高并发Web服务器上,CPU的user态是主力,因为大量请求在做页面渲染或JSON序列化,这时候要看每秒请求数对队列的影响,一旦发现load上升、响应时间拉长,就去看进程的CPU时间分布和上下文切换,内存在这个场景里主要看可用内存和socket缓冲区,当大量短连接建立时,内存碎片和连接队列容易出现异常,业内专家指出,这类机器上如果swap非零,就该立刻扩容或调参,没有第二种解释。

CPU和内存监控指标分别看哪些数据,服务器性能优化必看哪些关键参数?

数据库服务器的内存监控重点

数据库服务最大的特点是自己管理内存,比如MySQL的innodb_buffer_pool,Redis的所有数据,系统内存监控反而要退到第二线,你需要关注的是这些进程有没有大量使用操作系统的page cache做额外缓存,以及swap是否出现,另一个关键指标是页错误率和I/O等待,如果数据库进程的CPU消耗大量时间在等待内存页从磁盘加载,说明buffer pool配小了。

容器环境下的监控差异

容器里的CPU和内存监控和物理机不一样,你在容器内看到的/proc/stat/proc/meminfo往往是宿主机全局的视图,而不是你容器的配额,真正要看的指标是cgroup里的cpuacct.usage和memory.usage_in_bytes,以及容器运行时给你的CPU限额,如果容器超出限制,不是被终止就是被限流,表现为CPU使用率被强制压到阈值。

Linux下用命令实操监控

理论说多了容易飘,直接上命令,以下都是Linux系统里最常用的监控套路,建议搭配实际环境跑一遍。

第一梯队:top和vmstat

top提供全局快照,按大写P按CPU排序,按大写M按内存排序,重点关注顶部的load average和%Cpu的us、sy、wa、hi、si值。vmstat 1 5则提供连续采样,第一行是历史平均,后面才是实时数据,需要看的列:

  • r:运行队列中的进程数,持续大于CPU核数说明CPU饱和。
  • b:不可中断睡眠的进程数,长期大说明I/O有阻塞。
  • si/so:swap换入换出,非零就要警惕。
  • cs:上下文切换次数,异常高要考虑线程模型。

第二梯队:mpstat和pidstat

单核视角用mpstat -P ALL 1,每一行是一个核心,观察有没有某个核被压满,进程视角用pidstat -u -r 1,既能看CPU百分比,也能看内存变化,而且能按进程精确排查,比如你想知道nginx里哪个worker进程在偷跑,用它就能逮到。

第三梯队:free和sar

查看内存直观感受用

CPU和内存监控指标分别看哪些数据,服务器性能优化必看哪些关键参数?

free -h,注意available那一列,要记录历史趋势,用系统自带的sar。sar -r看内存分页,sar -q看负载,sar -w看每秒上下文切换,这些数据能帮你判断资源压力是持续性的还是偶发的,比单次快照更有价值。

更细的进程级内存怎么看

如果进程有内存泄漏嫌疑,用pmap -x 进程号看每个进程的内存映射表,或者cat /proc/进程号/smaps统计私有内存,日常监控不需要这么细,但如果你的JVM或Node进程内存只涨不跌,这些命令就是排查利器。

关于监控指标的最常问问题

CPU使用率100%和负载高是一回事吗

不是,CPU使用率100%表示算力被吃满,但负载高还可能来自磁盘中断或不可中断进程,有时候CPU使用率只有30%,load却超过核数,那是因为大量进程卡在I/O上,排队等待,反过来,CPU使用率100%时负载可能只有个位数,那说明只有一个或少量核心在忙,其余核心空闲。

free命令显示buff/cache很大,是不是内存不够了

不是,buff/cache是Linux把空闲内存拿来缓存磁盘和文件系统数据,属于正常世界,如果available列仍然充足,应用也稳定运行,就不需要处理,只有当available持续缩小,并且swap发生波动时,才考虑内存不足,你甚至可以用echo 3 > /proc/sys/vm/drop_caches手动释放缓存,但通常没必要强制清理。

容器里的内存监控和宿主机一样吗

不一样,容器内用free看到的宿主机全局内存,而非自己的限制,应该在cgroup目录里看memory.current和memory.max,或者直接用cat /sys/fs/cgroup/memory.current获取当前使用量,如果容器超出memory.max,进程可能会被OOM killer杀掉,这时宿主机看起来内存还很充足,但容器就是不升反降。

监控这件事,最怕就是看着一堆数字却不知道哪个能说明问题,CPU和内存的指标之间不是孤立的,上下文切换高了会引起CPU系统态上升,swap活跃会拖慢CPU进程,把本文提到的这些指标在你自己的机器上跑一遍,结合业务表现做横向对比,才能真正读懂它们。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱