Linux如何查看进程的CPU和内存占用

发布时间 - 2025-09-15 00:00:00    点击率:
要查看Linux进程的CPU和内存占用,最直接的方法是使用top、ps和htop命令。top提供实时动态监控,可按P键以CPU使用率排序,按M键以内存使用率排序,显示各进程的%CPU和%MEM等关键指标;ps用于获取某一时刻的进程快照,常用ps aux或结合grep查找特定进程,如ps aux | grep nginx;htop是top的增强版,界面更友好,支持鼠标操作和树状视图,便于直观分析。对于特定进程,可通过ps -p PID -o %cpu,%mem,cmd精确查询其资源占用,或使用pidstat进行细粒度采样分析。内存方面需重点理解VIRT(虚拟内存总量)、RES(实际物理内存占用)和SHR(共享内存大小),其中RES是判断内存压力的核心指标,VIRT反映地址空间大小,SHR表示共享部分,避免误判内存消耗。

在Linux系统上,要查看进程的CPU和内存占用,最直接有效的方法就是使用

top
htop
(如果已安装)和
ps
这些命令行工具。它们能让你快速了解系统整体或特定进程的资源消耗情况,是诊断性能问题的利器。

解决方案

要详细了解Linux进程的CPU和内存占用,我们通常会用到以下几个工具,它们各有侧重:

1.

top
命令:实时动态监控

top
是一个非常强大的实时监控工具,它会动态刷新显示当前系统中所有进程的资源使用情况。

top

运行后,你会看到一个交互式的界面,其中包含了许多重要的信息列:

  • PID: 进程ID。
  • USER: 进程所有者。
  • PR: 优先级。
  • NI: Nice值,负值表示高优先级,正值表示低优先级。
  • VIRT: 进程使用的虚拟内存总量(Virtual Memory Size)。
  • RES: 进程当前使用的物理内存总量(Resident Set Size)。
  • SHR: 进程使用的共享内存大小(Shared Memory Size)。
  • S: 进程状态(R运行,S睡眠,T停止,Z僵尸)。
  • %CPU: 进程使用的CPU百分比。
  • %MEM: 进程使用的物理内存百分比。
  • TIME+: 进程启动后占用的CPU总时间。
  • COMMAND: 启动进程的命令名。

top
界面中,你可以按
P
键按CPU使用率排序,按
M
键按内存使用率排序,按
k
键输入PID来杀死一个进程,按
q
键退出。这使得
top
成为快速诊断系统瓶颈的首选。

2.

ps
命令:快照式查看

ps
命令提供的是系统某一时刻的进程快照,不像
top
那样实时更新。它非常适合查找特定进程或进行脚本处理。

查看所有进程的详细信息:

ps aux

或者使用更详细的格式:

ps -ef

ps aux
的输出中,
%CPU
%MEM
列会直接显示CPU和内存占用百分比。如果你想查找特定进程,可以结合
grep

ps aux | grep nginx

这将列出所有包含"nginx"关键字的进程及其资源占用。

3.

htop
命令:增强型交互式监控

htop
top
的一个增强版本,提供了更友好的交互界面、彩色显示和更直观的操作。如果你的系统上没有,通常可以通过包管理器安装(例如,
sudo apt install htop
sudo yum install htop
)。

htop

htop
允许你使用鼠标或方向键轻松选择进程,按
F6
进行排序,按
F9
发送信号(杀死进程)等,非常方便。

如何实时监控Linux进程的资源使用情况?

当系统出现卡顿或者某个服务响应变慢时,我最先想到的就是实时监控工具。

top
htop
无疑是这方面的佼佼者。它们不仅仅是显示数据,更提供了一个动态的窗口,让你能“看”到系统的呼吸。

top
的优势在于其普遍性,几乎所有Linux发行版都自带,无需额外安装。进入
top
界面后,我通常会先按
P
键,让CPU占用最高的进程排在最前面,看看是不是有某个失控的进程在“吃”CPU。接着,我可能会按
M
键,检查内存大户,特别是那些
%MEM
值异常高的进程。理解
VIRT
RES
SHR
这三列内存指标非常重要,稍后我们会详细讨论。
top
的交互性让它在快速定位问题时非常高效,比如发现一个异常进程,可以直接按
k
输入PID将其杀死,当然这需要谨慎操作。

htop
则更像是一个升级版的
top
。它的彩色界面、更直观的CPU核心使用图、以及方便的鼠标操作,让我在长时间监控或需要频繁筛选、排序时更偏爱它。
htop
的树状视图(按
F5
)能清晰地展示父子进程关系,这在调试某些复杂应用时非常有用,比如一个Web服务器可能启动了多个工作进程,通过树状视图可以一目了然。我经常用
htop
来观察某个服务启动后的资源曲线,看看它是不是有内存泄漏的迹象,或者在特定负载下CPU使用是否合理。

除了这两个,偶尔我也会用

watch -n 1 'ps aux --sort=-%cpu | head -n 10'
这样的命令组合,每秒刷新一次,显示CPU占用最高的10个进程,虽然不如
top
/
htop
交互性强,但在某些脚本或自动化场景下也挺实用。

如何查找特定进程的CPU和内存占用?

很多时候,我们并不想看整个系统的资源情况,而是想聚焦到某个特定的应用或服务上,比如一个数据库进程、一个Web服务器或者我正在开发的某个程序。这时候,

ps
命令就显得非常灵活了。

最常用的方法是结合

grep

ps aux | grep my_application

这会列出所有名称中包含

my_application
的进程。但要注意,
grep
本身也会作为一个进程出现在输出中,所以通常我们会再加一个
grep -v grep
来排除它:

ps aux | grep my_application | grep -v grep

这样就能得到干净的进程列表,其中包含

PID
%CPU
%MEM
等信息。

如果我已经知道进程的PID,那么可以直接用

ps -p  -o %cpu,%mem,cmd
来精确获取其CPU和内存百分比以及完整的命令。例如,如果我的应用PID是12345:

ps -p 12345 -o %cpu,%mem,cmd

这种方式非常精确,尤其是在脚本中处理时。

对于更高级的场景,例如需要查看进程在一段时间内的资源变化趋势,

pidstat
(属于
sysstat
工具包)就非常强大了。它可以提供更详细的进程级别CPU、内存、I/O等统计信息,并且可以指定采样间隔和次数。

# 每秒采样一次,共采样5次,查看PID为12345的进程CPU使用情况
pidstat -u -p 12345 1 5

# 查看PID为12345的进程内存使用情况
pidstat -r -p 12345 1 5

pidstat
给出的数据颗粒度更细,对于性能分析和容量规划非常有帮助。我个人在排查一些偶发性性能问题时,会倾向于用
pidstat
来捕捉特定进程在某个时间段的行为模式。

Linux进程内存占用中的VIRT、RES和SHR分别代表什么?

这三个内存指标,初看起来容易混淆,但理解它们之间的区别对于准确评估进程的内存需求至关重要。我见过太多人因为只看

VIRT
值就误判内存压力的例子。

  • VIRT (Virtual Memory Size)

    VIRT
    代表的是进程当前可能使用的虚拟内存总量。这包括了进程的代码段、数据段、堆、栈,以及所有映射到进程地址空间的共享库、文件,甚至包括已经交换到磁盘上的内存页。它是一个理论上的上限,很多时候远大于进程实际占用的物理内存。例如,一个程序可能加载了大量的共享库,即使它只使用了其中一小部分功能,这些库的全部虚拟地址空间也会计入
    VIRT
    。所以,
    VIRT
    值很高并不一定意味着进程消耗了大量的物理内存,它更多地反映了进程的地址空间布局。

  • RES (Resident Set Size)

    RES
    是进程当前实际占用物理内存(RAM)的大小。这才是我们通常所说的“真实内存占用”。它不包括被交换到磁盘上的内存,也不包括共享给其他进程但当前未被当前进程使用的部分。当你在评估一个进程是否是“内存大户”时,
    RES
    是最关键的指标。如果
    RES
    持续增长,那很可能意味着内存泄漏或者进程确实需要大量内存来运行。

  • SHR (Shared Memory Size)

    SHR
    表示进程与其他进程共享的物理内存大小。这部分内存通常是共享库(如libc)的代码和数据。当多个进程都使用同一个共享库时,这个库的代码和数据只会在物理内存中加载一份,然后映射到每个进程的地址空间。
    SHR
    值高,说明该进程使用了较多的共享内存,这部分内存的消耗是分摊到多个进程上的,所以它并不会完全计入当前进程的独立内存开销。

简单来说,

RES
是衡量进程对系统物理内存压力的最直接指标。
VIRT
是潜力,
RES
是现实,
SHR
是共享。理解了这三者,就能更准确地判断一个进程的内存行为,避免被庞大的
VIRT
值所迷惑。在排查内存问题时,我总是先看
RES
,如果
RES
很高,再结合
SHR
来判断这部分内存是独占的还是共享的,从而更精确地定位问题。


# linux  # nginx  # app  # 工具  # 虚拟内存  # linux系统  # 区别  # 内存占用  # red  # sort  #   #   # 数据库  # 自动化  # 鼠标  # 多个  # 这部  # 树状  # 的是  # 也会  # 就能  # 实时监控  # 它是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 北京的网站制作公司有哪些,哪个视频网站最好?  如何在香港免费服务器上快速搭建网站?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  大同网页,大同瑞慈医院官网?  如何获取PHP WAP自助建站系统源码?  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Linux安全能力提升路径_长期防护思维说明【指导】  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Laravel如何保护应用免受CSRF攻击?(原理和示例)  在Oracle关闭情况下如何修改spfile的参数  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Laravel如何实现模型的全局作用域?(Global Scope示例)  php打包exe后无法访问网络共享_共享权限设置方法【教程】  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  非常酷的网站设计制作软件,酷培ai教育官方网站?  浅谈redis在项目中的应用  如何解决hover在ie6中的兼容性问题  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  微信小程序 input输入框控件详解及实例(多种示例)  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  怎么用AI帮你为初创公司进行市场定位分析?  进行网站优化必须要坚持的四大原则  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何快速搭建自助建站会员专属系统?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在阿里云购买域名并搭建网站?  javascript日期怎么处理_如何格式化输出  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  想要更高端的建设网站,这些原则一定要坚持!  HTML 中动态设置元素 name 属性的正确语法详解  如何在IIS中配置站点IP、端口及主机头?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  EditPlus中的正则表达式实战(5)  Laravel API资源类怎么用_Laravel API Resource数据转换  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  公司门户网站制作流程,华为官网怎么做?  PHP正则匹配日期和时间(时间戳转换)的实例代码  如何在云服务器上快速搭建个人网站?