查看进程内存使用情况

本文介绍了在Linux系统中如何使用ps命令和/proc文件系统来查看进程的内存使用情况。通过ps命令的sz、rss、vsz字段可以了解进程的虚拟内存和物理内存大小。同时,通过/proc/<pid>/status和/proc/<pid>/smaps可以获取更详细的内存信息,如共享库的使用、数据段、栈和代码段的大小。

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

用ps命令查看进程的内存

ps命令是Linux下常见的查看进程状况的程序,它有几个字段可以用来查看 进程内存使用情况:sz,rss,vsz。分别说明如下:

  • sz:进程映像所占用的物理页面数量,也就是以物理页面为单位表示的虚拟内存大小;
  • rss:进程当前所占用的物理内存大小,单位为kB;
  • vsz:进程的虚拟内存大小,单位为kB,它等于sz乘于物理页面大小(x86平台通常为4kB)。

 

假如我要查看程序a.out的内存使用情况,操作如下:

$ ./a.out &
[1] 10069 
$ ps -O sz,rsz,vsz
PID    SZ   RSS    VSZ S TTY          TIME COMMAND
 6793  1545  3648   6180 S pts/2    00:00:00 /bin/bash
10069   404   304   1616 S pts/2    00:00:00 ./a.out
10070   626   876   2504 R pts/2    00:00:00 ps -O sz,rss,vsz

上面ps命令的输出的第3行就是./a.out自行后的相关情况。我们可以看出,它的虚拟 内存大小为1616kB,当前占用的物理内存为304kB(其它数据在磁盘上或交换分区),虚 拟内存占用404个物理页面。由于我的机器的物理页面大小为4kB,可以验证404 x 4kB等于1616kB。

 

用/proc文件系统查看进程的内存使用情况

ps命令的输出关于内存的情况不是很详细,尤其是进程所使用的内存中 有很大一部分是共享库函数使用的,因此通过ps命令的输出看不到进程自己使用了多 少内存。为了查看更详细的信息,可以借助于/proc文件系统。这个文件系 统并存在于磁盘上,但是可以象操作其它普通文件一样操作它。它是Linux提供给用户 查看进程相关信息的接口。在/proc下有2个文件和进程内存有 关:/proc/<pid>/status/proc/<pid>/smaps

通过/proc/<pid>/status可以查看进程的内存使用情况,包括虚拟内 存大小(VmSize),物理内存大小(VmRSS),数据段大小(VmData),栈的大小 (VmStk),代码段的大小(VmExe),共享库的代码段大小(VmLib)等等。

$ cat /proc/10069/status
Name:   a.out
State:  S (sleeping)
Tgid:   10069
Pid:    10069
PPid:   6793
TracerPid:      0
Uid:    1001    1001    1001    1001
Gid:    1001    1001    1001    1001
FDSize: 256
Groups: 1000 1001 
VmPeak:     1692 kB
VmSize:     1616 kB
VmLck:         0 kB
VmHWM:       304 kB
VmRSS:       304 kB
VmData:       28 kB
VmStk:        88 kB
VmExe:         4 kB
VmLib:      1464 kB
VmPTE:        20 kB
Threads:        1
SigQ:   0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed:   f
Cpus_allowed_list:      0-3
Mems_allowed:   1
Mems_allowed_list:      0
voluntary_ctxt_switches:        1
nonvoluntary_ctxt_switches:     1

 

注意,VmData,VmStk,VmExe和VmLib之和并不等于VmSize。这是因为共享库函数的数 据段没有计算进去(VmData仅包含a.out程序的数据段,不包括共享库函数的数据段, 也不包括通过mmap映射的区域。VmLib仅包括共享库的代码段,不包括共享库的数据 段)。

通过/proc/<pid>/smaps可以查看进程整个虚拟地址空间的映射情况,它的输出从低地址到高地址按顺序输出每一个映射区域的相关信息,如下所示:

$ cat /proc/10069/smaps
00110000-00263000 r-xp 00000000 08:07 128311     /lib/tls/i686/cmov/libc-2.11.1.so
Size:               1356 kB
Rss:                 148 kB
Pss:                   8 kB
Shared_Clean:        148 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         0 kB
Referenced:          148 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
......
......
bfd7f000-bfd94000 rw-p 00000000 00:00 0          [stack]
Size:                 88 kB
Rss:                   8 kB
Pss:                   8 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:         8 kB
Referenced:            8 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB

注意:rwxp中,p表示私有映射(采用Copy-On-Write技术)。 Size字段就是该区域的大小。

 

参考文献

  • ps(1) -O选项。
  • proc(5) /proc/[pid]/status和/proc/[pid]/smaps条目。

Updated: 2011-03-04 17:11

<think>好的,我现在要帮用户解决在Linux系统中查看进程内存使用情况的问题。用户已经提供了一些引用资料,我需要先仔细看看这些内容,然后整理出合适的命令和方法。 首先,用户给的引用[3]和[4]提到了top和ps命令,这两个应该是常用的工具。引用[3]里提到用top -u指定用户,或者top -p指定进程ID,这样可以查看特定进程的内存情况。而引用[4]则详细说明了ps命令中-o参数的使用,可以自定义输出的列,比如rsz是实际内存,vsz是虚拟内存。 接下来,我需要把这些信息组织成用户容易理解的步骤。可能需要分点介绍不同的命令,比如top、ps、pmap,还有/proc文件系统的方法。每个命令需要给出具体的例子,比如ps -e -o的各个参数,还有排序的方法,这样用户可以直接复制使用。 另外,用户可能对每个命令的特点不太清楚,比如top是动态的,而ps是静态的,pmap可以看更详细的内存映射。这些区别需要说明,帮助用户根据情况选择合适的方法。 还要注意引用标注的问题,每个提到的命令如果对应的引用里有相关内容,就需要在末尾加上引用标识,比如[^3]或[^4]。确保格式正确,使用中文回答,数学公式用$...$,如果有的话,但这里可能用不上。 可能还需要检查是否有其他相关命令,比如free或者htop,不过根据引用内容,用户主要关注进程级别的内存查看,所以应该集中在top、ps、pmap和/proc上。需要确认这些是否在提供的引用中有覆盖,如果没有的话,可能需要避免加入,但根据引用[3]和[4],应该足够。 最后,生成相关问题的时候,要考虑用户可能的后续疑问,比如如何按内存排序,或者如何持续监控,或者内存使用的单位转换。这样能帮助用户更深入地了解相关命令的使用和优化。</think>Linux系统查看进程内存使用情况主要有以下几种方法,按使用场景推荐如下操作: ### 一、使用top命令(动态监控) 输入命令: ```bash top -p [进程PID] # 查看指定进程 或 top -u [用户名] # 查看指定用户的进程 ``` 在输出界面中: - `RES`列表示实际物理内存使用量(单位KB) - `%MEM`列显示占用总内存百分比[^3] ### 二、使用ps命令(静态快照) 通过定制输出格式查看内存: ```bash ps -eo pid,user,comm,rss,vsz,%mem --sort=-rss | head ``` 参数解析: - `rss`:实际内存使用量(单位KB) - `vsz`:虚拟内存使用量 - `--sort=-rss` 表示按内存使用降序排序[^4] ### 三、pmap命令(详细映射) 查看进程内存映射细节: ```bash pmap -x [进程PID] ``` 输出包含: - 每个内存段的地址空间 - 共享库占用统计 - 总内存汇总行 ### 四、/proc文件系统(原始数据) 通过进程目录查看实时数据: ```bash cat /proc/[PID]/status | grep -E 'VmRSS|VmSize' ``` - `VmRSS`:实际使用物理内存 - `VmSize`:虚拟内存总量[^2]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值