0

0

Linux如何监控CPU与内存使用?_Linuxtop和vmstat工具实操

看不見的法師

看不見的法師

发布时间:2025-08-03 08:33:01

|

1147人浏览过

|

来源于php中文网

原创

使用top命令查看%cpu(s)行,若us和sy总和高且id接近0,则cpu繁忙;2. 检查wa值是否高,判断是否因i/o等待导致瓶颈;3. 查看load average是否持续超过cpu核心数;4. 分析top中进程列表,确认高cpu使用进程是否异常;5. 利用vmstat检查r和b值,判断进程是否等待cpu或阻塞;6. 结合业务场景和服务响应判断是否为实际瓶颈。要识别内存泄漏,1. 通过free -h或top观察free内存是否持续下降;2. 使用vmstat检查swpd、si/so是否增长;3. 在top或ps aux中查找res/virt持续增长的进程;4. 长期监控并比对rss值变化;5. 使用valgrind等工具深入分析应用层内存问题。应对措施包括重启服务、代码优化、更新软件、增加内存、关闭非必要进程、调整swappiness参数等。

Linux如何监控CPU与内存使用?_Linuxtop和vmstat工具实操

在Linux系统上,要快速了解CPU和内存的使用状况,

top
vmstat
是两个最基础也最实用的工具。它们能提供实时的系统概览和关键性能指标,帮助我们迅速定位潜在的性能瓶颈。

Linux如何监控CPU与内存使用?_Linuxtop和vmstat工具实操

解决方案

要监控Linux系统的CPU和内存使用,我们主要依赖

top
vmstat
这两个命令行工具。它们各有侧重,结合使用能提供相当全面的视角。

使用

top
进行实时概览:

Linux如何监控CPU与内存使用?_Linuxtop和vmstat工具实操

top
是一个动态的实时进程查看器,它能显示系统中正在运行的进程列表,并按CPU使用率排序。 直接在终端输入
top
即可启动。

你会看到一个类似于仪表盘的界面:

Linux如何监控CPU与内存使用?_Linuxtop和vmstat工具实操
  • 顶部区域:显示系统总览,包括当前时间、系统运行时间、登录用户数、平均负载(load average)。
  • Tasks(任务):显示进程总数、运行中、休眠中、停止和僵尸进程的数量。
  • %Cpu(s):显示CPU使用率,包括用户空间(
    us
    )、系统空间(
    sy
    )、空闲(
    id
    )、I/O等待(
    wa
    )等。
  • MiB Mem(内存):显示物理内存的总量、已使用、空闲和缓存/缓冲区的大小。
  • MiB Swap(交换空间):显示交换空间的总量、已使用、空闲和可用量。
  • 进程列表:下方是按CPU使用率排序的进程列表,包含PID、用户、优先级、CPU使用率(
    %CPU
    )、内存使用率(
    %MEM
    )、虚拟内存(
    VIRT
    )、常驻内存(
    RES
    )、共享内存(
    SHR
    )等。

top
的常用交互命令:

  • P
    :按CPU使用率排序(默认)。
  • M
    :按内存使用率排序。
  • k
    :终止一个进程(需要输入PID)。
  • q
    :退出
    top
  • 1
    :在多核CPU系统上,切换显示所有CPU核心的独立使用率。
  • z
    :切换颜色模式,让输出更易读。

使用

vmstat
进行系统活动统计:

vmstat
(virtual memory statistics)提供关于进程、内存、分页、块IO、陷阱和CPU活动的信息。它不像
top
那样提供详细的进程列表,但它能以固定时间间隔输出数据,更适合观察系统随时间的变化趋势。

常用命令:

vmstat 1
这会每秒输出一次系统统计信息。

vmstat
输出的关键指标:

  • procs
    (进程)
    • r
      :等待运行的进程数。
    • b
      :处于不可中断睡眠状态的进程数(通常在等待I/O)。
  • memory
    (内存)
    • swpd
      :已使用的虚拟内存(交换空间)。
    • free
      :空闲物理内存。
    • buff
      :用作缓冲区的内存。
    • cache
      :用作缓存的内存。
  • swap
    (交换)
    • si
      :每秒从磁盘换入的内存量(KB)。
    • so
      :每秒写入磁盘的内存量(KB)。
  • io
    (I/O)
    • bi
      :每秒从块设备接收的块数(读)。
    • bo
      :每秒发送到块设备的块数(写)。
  • system
    (系统)
    • in
      :每秒中断次数。
    • cs
      :每秒上下文切换次数。
  • cpu
    (CPU)
    • us
      :用户空间CPU使用率。
    • sy
      :系统空间CPU使用率。
    • id
      :空闲CPU使用率。
    • wa
      :等待I/O的CPU使用率。
    • st
      :被虚拟机管理程序“偷走”的CPU时间(仅在虚拟机中可见)。

top
提供的是一个快照和最活跃进程的视图,适合快速诊断。
vmstat
则更侧重于系统整体资源的使用趋势,尤其是I/O和内存交换情况,对于发现长期存在的性能问题非常有帮助。

如何判断CPU利用率过高是否导致性能瓶颈?

当你在Linux服务器上看到CPU利用率飙升时,这确实是个警示信号。但高利用率本身不一定就是“瓶颈”,关键在于它是否影响了服务的响应速度或系统的整体吞吐量。

判断CPU是否成为瓶颈,通常我会这么看:

首先,用

top
命令。 观察顶部的
%Cpu(s)
行。

  • 如果
    us
    (用户空间) 和
    sy
    (系统空间) 的总和很高,而
    id
    (空闲) 接近0,这意味着CPU确实非常繁忙。
  • 更重要的是看
    wa
    (I/O等待)。如果
    wa
    很高,比如达到20%甚至更高,那说明CPU大部分时间在等待磁盘I/O完成,而不是在执行计算。这种情况下,瓶颈可能在磁盘I/O,而不是CPU本身。

接着,看

load average
。 在
top
的第一行或直接运行
uptime
命令可以看到。它显示了过去1分钟、5分钟和15分钟内,处于可运行状态和不可中断睡眠状态的平均进程数。

  • 一个简单的经验法则是,负载平均值不应持续超过你的CPU核心数。例如,一个4核CPU的服务器,如果负载平均值长时间稳定在4以上,那CPU可能确实是瓶颈。如果负载平均值远低于核心数,即使CPU利用率看起来很高,也可能是某些计算密集型任务在充分利用资源,而不是“瓶颈”。

然后,关注

top
进程列表中的具体进程。

  • 哪个进程占用了最高的
    %CPU
    ?是一个预期的应用进程(如数据库、Web服务)?还是一个意外的脚本或僵尸进程?如果是一个你预期的应用,那么它可能只是在努力工作。但如果它的CPU使用率高到离谱,并且服务响应变慢,那可能需要优化该应用或增加CPU资源。
  • 检查
    r
    (运行队列) 和
    b
    (阻塞队列) 在
    vmstat
    中的值。如果
    r
    持续很高,说明有很多进程在等待CPU,CPU资源确实紧张。如果
    b
    持续很高,则可能暗示I/O或内存问题导致进程阻塞。

举个例子,如果你的Web服务器,在用户访问量暴增时,

top
显示Nginx或PHP-FPM进程的
%CPU
很高,同时
load average
也相应上升,并且用户反馈页面加载缓慢,那么CPU很可能就是瓶颈。但如果是一个视频转码服务器,CPU长期跑满100%是正常的,因为它的任务就是充分利用CPU资源。所以,判断瓶颈需要结合业务场景和用户体验来综合分析。

除了top和vmstat,还有哪些工具可以提供更深入的内存使用分析?

top
vmstat
确实很棒,但它们只是冰山一角。在需要深入挖掘内存使用细节时,还有一些工具能提供更细致的视图:

AIBox 一站式AI创作平台
AIBox 一站式AI创作平台

AIBox365一站式AI创作平台,支持ChatGPT、GPT4、Claue3、Gemini、Midjourney等国内外大模型

下载

1.

free -h
:快速总览,更易读 这是我最常用的一个命令。
free -h
会以人类可读的格式(如GB、MB)显示系统的总内存、已用、空闲、共享、缓冲区/缓存以及“可用”内存。

  • 关键点:注意
    available
    (可用) 内存,它表示应用程序可以立即使用的内存量,包括未被使用的物理内存和可以回收的缓存/缓冲区内存。很多新手会只看
    free
    ,然后误以为内存不足,但实际上Linux会尽量把空闲内存用作缓存,提高系统性能。

2.

htop
:交互式增强版
top
如果你觉得
top
的界面有点“硬核”,
htop
绝对值得一试(可能需要安装,如
sudo apt install htop
)。

  • 优点:它提供了彩色的、更直观的界面,可以方便地通过鼠标或键盘箭头选择进程、杀死进程、调整优先级。内存和CPU使用率以进度条形式展现,一目了然。它还支持进程树视图,方便查看父子进程关系。

3.

ps aux --sort=-%mem
:按内存使用率排序的进程列表 当你想找出哪个进程是“内存大户”时,这个命令非常有用。

  • ps aux
    列出所有用户的进程,包括它们的用户、PID、CPU和内存使用率等。
  • --sort=-%mem
    告诉
    ps
    按内存使用率降序排列
    %MEM
    前面的
    -
    表示降序)。 这样你就能一眼看到哪些进程占用了最多的内存。

4.

/proc/meminfo
:内核内存信息源 这个文件包含了内核关于内存使用的最原始、最详细的信息。它不是一个命令,而是一个虚拟文件。

  • 你可以用
    cat /proc/meminfo
    来查看。
  • 它提供了诸如
    MemTotal
    MemFree
    Buffers
    cache
    SwapTotal
    SwapFree
    等详细指标,甚至包括各种内核内部结构(如
    Slab
    PageTables
    )的内存使用情况。对于需要编写脚本来监控内存或进行深度分析的场景,它是一个宝贵的直接数据源。

5.

smem
:更精确的内存报告
smem
(需要安装) 是一个更高级的内存报告工具,它能显示进程的常驻内存(RSS)、共享内存(PSS)、以及独特的内存(USS)。

  • PSS
    (Proportional Set Size) 是一个很有用的指标,它计算了进程实际使用的物理内存量,包括与其它进程共享的内存,但共享部分会按比例分配。这比
    RSS
    更能反映一个进程的真实内存占用

6.

slabtop
:内核Slab缓存使用 对于内核开发者或需要诊断内核内存问题的场景,
slabtop
可以显示内核Slab缓存的使用情况。Slab缓存是内核用来管理小对象内存分配的机制。如果这里出现异常增长,可能暗示内核层面的内存问题。

理解内存使用,特别是Linux的内存管理机制(如缓存、缓冲区、交换空间),是诊断内存问题的关键。这些工具能帮助你从不同维度观察内存状况,从而更准确地判断是否存在内存泄漏或内存压力。

如何识别和应对Linux系统中的内存泄漏或持续的交换活动?

内存泄漏和持续的交换活动是Linux系统性能下降的常见元凶,它们会让人感觉系统“越来越慢”,甚至最终崩溃。识别和应对它们需要一些观察和策略。

识别内存泄漏:

内存泄漏是指应用程序在分配内存后未能正确释放,导致内存占用持续增长,即使在没有明显活动时也是如此。

症状:

  • 内存持续下降,无回收:
    free -h
    top
    中显示的
    free
    内存持续减少,而
    buff/cache
    并没有相应地大量增加。
  • 交换空间持续增长:
    vmstat
    swpd
    列持续增加,
    si
    so
    列出现持续的非零值,表明系统正在频繁地将内存数据交换到硬盘上。
  • 特定进程内存飙升:
    top
    ps aux --sort=-%mem
    中,某个或某几个进程的
    RES
    (常驻内存) 或
    VIRT
    (虚拟内存) 值持续、缓慢地增长,即使其活动量不大。
  • 系统响应变慢: 随着内存耗尽,系统开始频繁使用交换空间,导致磁盘I/O飙升,整体响应速度显著下降。

识别方法:

  1. 长期观察
    top
    htop
    周期性地查看进程列表,关注那些
    VIRT
    RES
    值持续增长的进程。
  2. ps aux --sort=-rss
    运行这个命令,按常驻内存大小排序,找出当前内存占用最大的进程。然后可以记录下它们的PID和RSS值,过一段时间再运行一次,对比是否持续增长。
  3. vmstat
    swpd
    si
    /
    so
    持续观察
    vmstat 1
    的输出,如果
    swpd
    持续增加,并且
    si
    /
    so
    长期不为零,这是内存不足和交换活动频繁的明确信号。
  4. 应用程序日志: 有些应用程序可能会在日志中记录内存使用情况或异常。
  5. 专业工具: 对于应用程序层面的内存泄漏,
    valgrind
    (针对C/C++程序) 或
    Go/Java
    等语言自带的内存分析工具是更精确的利器。

应对内存泄漏:

  • 定位源头: 确定是哪个应用程序或服务存在内存泄漏。
  • 重启服务: 最直接但治标不治本的方法是重启有泄漏的服务,暂时释放内存。
  • 代码审查与优化: 如果是自己开发的应用,需要深入代码,查找内存分配和释放不匹配的地方。
  • 更新或降级: 如果是第三方应用,检查是否有更新版本修复了已知内存泄漏问题,或者尝试回滚到稳定版本。

识别持续的交换活动:

持续的交换活动(Swapping)意味着系统物理内存不足,正在频繁地将内存中的数据移到硬盘上的交换空间,或从交换空间移回内存。这会极大地降低系统性能,因为硬盘I/O比内存访问慢几个数量级。

症状:

  • vmstat
    si
    so
    持续非零:
    这是最直接的指标。
    si
    (swap in)表示从磁盘读入交换页,
    so
    (swap out)表示写入磁盘的交换页。只要它们持续有值,就说明系统正在频繁交换。
  • 磁盘活动灯常亮: 即使没有明显的读写操作,服务器的硬盘活动指示灯也频繁闪烁。
  • 系统卡顿、响应缓慢: 无论是执行命令还是打开应用程序,都感觉明显迟滞。

应对持续交换活动:

  1. 增加物理内存: 最根本的解决方案。如果系统长期内存不足,增加RAM是最有效的办法。
  2. 优化内存使用:
    • 关闭不必要的服务或进程: 找出并停止那些占用大量内存但并非必需的服务。
    • 优化应用程序: 调整应用程序配置,减少其内存占用。例如,降低数据库的缓存大小,减少Web服务器的并发连接数等。
    • 调整
      swappiness
      参数:
      swappiness
      参数控制内核将进程数据从物理内存交换到硬盘的倾向。默认值通常是60(范围0-100)。
      • sudo sysctl vm.swappiness=10
        :将
        swappiness
        设置为较低的值(如10),会减少内核将活跃进程交换出去的倾向,优先使用缓存。这通常能改善桌面和服务器的响应性,但可能会导致
        buff/cache
        减少。
      • 要永久生效,需要修改
        /etc/sysctl.conf
        文件,添加或修改
        vm.swappiness = 10
        ,然后运行
        sudo sysctl -p
  3. 增加交换空间: 如果确实无法增加物理内存,并且内存压力巨大,可以考虑增加交换空间的大小。但这只是一个缓解措施,不能解决根本问题,因为交换空间的速度远不及物理内存。
  4. 检查内存泄漏: 持续的交换活动很可能是由内存泄漏引起的,所以要结合上述方法排查内存泄漏。

总的来说,处理这些问题需要耐心和细致的观察。从宏观的

vmstat
到微观的
top
进程列表,再到应用程序本身的日志和代码,一步步排查,才能找到真正的症结所在。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

522

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

610

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

244

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

714

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3618

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

56

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

72

2026.01.13

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.6万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号