查看进程所占内存/proc/[pid]/statm踩坑记

需求:

杀掉内存占用较高的进程。

解决方法:

读取进程的/proc/[pid]/statm,取第二个值作为进程使用的内存来判断是否kill。man文档里也说:same as VmRSS in /proc/[pid]/status。

/proc/[pid]/statm
              Provides information about memory usage, measured in pages.
              The columns are:

                  size       (1) total program size
                             (same as VmSize in /proc/[pid]/status)
                  resident   (2) resident set size
                             (same as VmRSS in /proc/[pid]/status)
                  share      (3) shared pages (i.e., backed by a file)
                  text       (4) text (code)
                  lib        (5) library (unused in Linux 2.6)
                  data       (6) data + stack
                  dt         (7) dirty pages (unused in Linux 2.6)

坑:

进程内存占用较高时,未按预期被杀。

原因:

cat /proc/1/statm
180024 1241 1046 35 0 171703 0

参数 解释 /proc/[pid]/status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk4

/proc/[pid]/status里的数值实际是按page来统计的,第二列为Resident(pages)—— 应用程序正在使用的物理内存的大小 VmRSS/4,为实际使用内存数值的四分之一。

你可能感兴趣的:(Linux工具)