Linux查看CPU和内存使用情况(ps、free、htop、atop、nmon、/proc/meminfo等)

本文详细介绍了如何在Linux系统中查看CPU和内存使用情况,包括使用`ps`、`free`命令以及`htop`、`atop`和`nmon`等工具。`htop`提供了更友好的界面和实时监控,`atop`和`nmon`则提供更全面的系统资源信息。此外,还解析了`/proc/meminfo`文件中的内存信息,如`MemTotal`、`MemFree`和`MemAvailable`等。通过对这些工具和概念的理解,可以帮助管理员更好地监控和优化系统资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux查看CPU和内存使用情况

Linux查看CPU和内存命令:ps

1.CPU占用最多的前10个进程:

ps auxw|head -1;ps auxw|sort -rn -k3|head -10

2.内存消耗最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k4|head -10

3.虚拟内存使用最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k5|head -10
  1. 查看某一类进程占用总资源
    思路:使用ps命令,对内存相关的列进行求和。

查看哪一列是内存、哪一列是内存百分比

 ps auxw | more 

在这里插入图片描述由上图,内存百分比 我们就使用$4, 具体内存(KB)我们就用$6
如下,我们查看python相关进程,内存占用情况:

ps auxw | grep python | awk '{sum+= $4} END {print sum}'
ps auxw | grep python | awk '{sum+= $6} END {print sum}'

另外,我们python程序中,我们想排除一些额外的进程,我们可以继续利用 grep -v 去排除一下,例如:

ps auxw | grep python |  grep -v  xxxx | awk '{sum+= $6} END {print sum}'

查看系统内存命令:free

free命令是一个快速查看内存使用情况的方法,它是对 /proc/meminfo 收集到的信息的一个概述。

free命令可以显示当前系统未使用的和已使用的内存大小,还可以显示被内核使用的内存缓冲区:
在这里插入图片描述

  • Mem:内存的使用信息
  • Swap:交换空间的使用信息
  • total:总计物理内存的大小
  • used:已使用物理内存
  • free:可用物理内存
  • shared:多个进程共享的内存总额
  • buffers/cached:缓存缓冲使用物理内存大小
  • available:还可以被应用程序使用的物理内存大小

free与available的区别

total = used + free + buffer/cache
avaiable = free + buffer/cache(服务器或者公共云普通用户有部分buffer/cache是用不了的就会有avaiable < free + buffer/cache)

free是未被使用的内存
available是应用程序认为可用的内存
注意:Linux为了提升读写性能,消耗一部分内存资源作为缓存或者缓冲内存,在内核看来这部分buffer/cache属于已被使用的内存;在应用程序申请内存,而free内存不够时,就会让内核回收buffer和cache来满足应用程序的内存需求。

htop (推荐)

官网:https://htop.dev/
github: https://github.com/htop-dev/htop

htop命令显示了每个进程的内存实时使用率。它提供了所有进程的常驻内存大小、程序总内存大小、共享库大小等的报告。列表可以水平及垂直滚动。
在这里插入图片描述

htop相比较top的优势:

  • 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
  • 在启动上比top 更快。
  • 杀进程时不需要输入进程号。
  • 通过鼠标操作条目。
  • top 已不再维护。

安装

yum -y install  epel-release
yum -y install htop

htop 参数

-C --no-color        使用一个单色的配色方案
-d --delay=DELAY     设置延迟更新时间,单位秒
-h --help           显示htop 命令帮助信息
-u --user=USERNAME    只显示一个给定的用户的过程
-p --pid=PID,PID…       只显示给定的PIDs
-s --sort-key COLUMN     依此列来排序
-v –version          显示版本信息
交互式命令(INTERACTIVE COMMANDS)
上下键或PgUP, PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程;
Space    标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
U    取消标记所有进程
s    选择某一进程,按s:用strace追踪进程的系统调用
l    显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件
I    倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然
+, -    When in tree view mode, expand or collapse subtree. When a subtree is collapsed a "+" sign shows to the left of the process name.
a (在有多处理器的机器上)    设置 CPU affinity: 标记一个进程允许使用哪些CPU
u    显示特定用户进程
M    按Memory 使用排序
P    按CPU 使用排序
T    按time+ 使用排序
F    跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。
K    显示/隐藏内核线程
H    显示/隐藏用户线程
Ctrl-L    刷新
Numbers    PID 查找: 输入PID,光标将移动到相应的进程上

常用

-u参数查看指定用户进程信息

htop -u xxx_name

s:显示光标所在进程执行的系统调用;

界面说明

在这里插入图片描述该行主要显示CPU使用情况,htop还为将不同颜色来区分是使用情况:
(1)蓝色的表示low-prority(低优先级)使用
(2)绿色的表示normal(标准)使用情况
(3)红色的表示kernel(内核)使用情况
(4)青色的表示virtuality(虚拟性)使用情况

在这里插入图片描述该行主要表示内存使用情况,同样的htop使用了不同颜色来区分是使用情况:
(1)绿色的表示已经使用内存情况
(2)蓝色的表示用于缓冲的内存使用情况
(3)黄色的表示用于缓存的内存使用情况

在这里插入图片描述

  • PID:进行的标识号
  • USER:运行此进程的用户
  • PRI:进程的优先级
  • NI:进程的优先级别值,默认的为0,可以进行调整
  • VIRT:进程占用的虚拟内存值
  • RES:进程占用的物理内存值
  • SHR:进程占用的共享内存值
  • S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
  • %CPU:该进程占用的CPU使用率
  • %MEM:该进程占用的物理内存和总内存的百分比
  • TIME+:该进程启动后占用的总的CPU时间(他代表的并不是程序从启动到现在总共经过了多久,而是这个程式总共占用了多少 CPU Time)
    如果想知道长期而言哪个程序最占 CPU 的话,就看 Time+ 的数值
  • COMMAND:进程启动的启动命令名称

这里主要需要理解:
理解virt、res、shr之间的关系(linux系统篇)
参考URL:https://baijiahao.baidu.com/s?id=1743908545937632735

  • VIRT:进程占用的虚拟内存值。
    VIRT代表进程当前时刻有多少内存可以访问。进程虚拟空间的大小, 是真实使用的内存,加上映射进程自己使用的内存。
    基本上你可以把他想成 process 可以存取到的 memory 总和。
  • RES:进程占用的物理内存值
    意味驻留内存大小, 是当前进程真正占用物理内存的精确反映. (直接与%MEM列相对应.) RES始终要比VIRT小。
    RES=CODE+DATA SHR:共享内存大小,单位kb
  • SHR:进程占用的共享内存值
    SHR:共享内存大小,单位kb
    其实我们写的程序会依赖于很多外部的动态库(.so),比如libc.so、libld.so等等。这些动态库在内存中仅仅会保存/映射一份,如果某个进程运行时需要这个动态库,那么动态加载器会将这块内存映射到对应进程的虚拟内存空间中。多个进展之间通过共享内存的方式相互通信也会出现这样的情况。

某个进程占用的内存除了和别的进程共享的内存之外就是自己的独占内存了。所以要计算进程独占内存的大小只要用RES的值减去SHR值即可。

atop

Atop 是一个基于 ASCII 的全屏的性能监控工具,可用来监控进程的活动时间,高亮显示出一些过载的进程,还包括其他的一些系统指标例如:CPU、内存、交换分区、磁盘和网络等信息。

yum install atop

nmon(推荐)

nmon是一个基于ncurses的系统基准测试工具,它可以监控CPU、内存、I/O、文件系统及网络资源等的互动模式。对于内存的使用,它可以实时的显示 总/剩余内存、交换空间等信息。

参考文章:服务器资源监控工具-nmon、nmon_analyser

/proc/meminfo

MemTotal: 45964 kB //所有可用的内存大小,物理内存减去预留位和内核使用。系统从加电开始到引导完成,firmware/BIOS要预留一些内存,内核本身要占用一些内存,最后剩下可供内核支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的,重启会改变。
MemFree: 1636 kB //表示系统尚未使用的内存。
MemAvailable: 8496 kB //真正的系统可用内存,系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以这部分可回收的内存加上MemFree才是系统可用的内存
Buffers: 0 kB //用来给块设备做缓存的内存,(文件系统的 metadata、pages)
Cached: 7828 kB //分配给文件缓冲区的内存,例如vi一个文件,就会将未保存的内容写到该缓冲区
SwapCached: 0 kB //被高速缓冲存储用的交换空间(硬盘的swap)的大小
Active: 19772 kB //经常使用的高速缓冲存储器页面文件大小
Inactive: 3128 kB //不经常使用的高速缓冲存储器文件大小
Active(anon): 15124 kB //活跃的匿名内存
Inactive(anon): 52 kB //不活跃的匿名内存
Active(file): 4648 kB //活跃的文件使用内存
Inactive(file): 3076 kB //不活跃的文件使用内存
Unevictable: 0 kB //不能被释放的内存页
Mlocked: 0 kB //系统调用 mlock 家族允许程序在物理内存上锁住它的部分或全部地址空间。这将阻止Linux 将这个内存页调度到交换空间(swap space),即使该程序已有一段时间没有访问这段空间
SwapTotal: 0 kB //交换空间总内存
SwapFree: 0 kB //交换空间空闲内存
Dirty: 4 kB //等待被写回到磁盘的
Writeback: 0 kB //正在被写回的
AnonPages: 15100 kB //未映射页的内存/映射到用户空间的非文件页表大小
Mapped: 7160 kB //映射文件内存
Shmem: 100 kB //已经被分配的共享内存
Slab: 9236 kB //内核数据结构缓存
SReclaimable: 2316 kB //可收回slab内存
SUnreclaim: 6920 kB //不可收回slab内存
KernelStack: 2408 kB //内核消耗的内存
PageTables: 1268 kB //管理内存分页的索引表的大小
NFS_Unstable: 0 kB //不稳定页表的大小
Bounce: 0 kB //在低端内存中分配一个临时buffer作为跳转,把位于高端内存的缓存数据复制到此处消耗的内存
WritebackTmp: 0 kB //FUSE用于临时写回缓冲区的内存
CommitLimit: 22980 kB //系统实际可分配内存
Committed_AS: 536244 kB //系统当前已分配的内存
VmallocTotal: 892928 kB //预留的虚拟内存总量
VmallocUsed: 29064 kB //已经被使用的虚拟内存
VmallocChunk: 860156 kB //可分配的最大的逻辑连续的虚拟内存

### 回答1: 是的,/proc/meminfo 包含了系统的内存信息。这个文件中包含了很多有用的信息,例如: - MemTotal:系统总内存大小 - MemFree:空闲内存大小 - Buffers:用于缓存的内存大小 - Cached:用于缓存的内存大小 - SwapTotal:交换区总大小 - SwapFree:交换区空闲大小 这些信息可以帮助你了解系统内存使用情况,并且帮助你分析系统性能问题。 ### 回答2: 不,/proc/meminfo文件并不包含所有的内存信息。它只提供了系统内存的一些关键指标统计数据。例如,/proc/meminfo文件中可以获取到的信息包括: 1. MemTotal:系统总内存大小。 2. MemFree:可用的空闲内存大小。 3. Buffers:被用作内核缓冲的内存大小。 4. Cached:被用作文件缓存的内存大小。 5. SwapCached:被用作交换区缓存的内存大小。 6. SwapTotal:交换区总内存大小。 7. SwapFree:可用的交换区内存大小。 但是,/proc/meminfo文件并不包含每个进程或应用程序使用的内存的详细信息。要获取特定进程的内存信息,需要使用其他工具(如top、htopps等)或者结合其他/proc目录下的文件进行查询。例如,/proc/[pid]/status文件提供了有关特定进程的内存信息,如VmRSS字段提供了进程当前使用的物理内存大小。 因此,尽管/proc/meminfo提供了一些重要的系统内存信息,但要获取更详细的内存信息,需要结合其他工具文件来进行查询分析。 ### 回答3: /proc/meminfo是一个特殊的文件,提供了关于系统内存使用情况的信息。它包含了大量的内存相关统计数据,但并不是包含所有的内存信息。 /proc/meminfo文件中包含的内容包括: 1. MemTotal:系统中总共的可用物理内存大小。 2. MemFree:系统中空闲的物理内存大小。 3. MemAvailable:系统中当前可用的物理内存大小,可以使用但不能保证完全空闲。 4. Buffers:用于存储块设备(硬盘等)的缓冲区大小。 5. Cached:用于存储文件缓存的大小。 6. SwapCached:用于存储交换空间中的缓存大小。 7. SwapTotal:系统中总共的交换空间大小。 8. SwapFree:系统中空闲的交换空间大小。 9. Dirty:等待写回磁盘的内存大小。 10. Writeback:正在写回磁盘的内存大小。 11. AnonPages:匿名页面(未映射到文件)的内存大小。 12. Mapped:被映射到进程地址空间的文件的内存大小。 尽管/proc/meminfo提供了大量内存统计数据,但它并不包含所有的内存信息。例如,它不提供每个进程或线程独占的内存使用情况,也无法提供详细的内存分配信息。 要获取更多细节的内存信息,可以使用其他工具命令,如top、free、vmstat等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值