需求:
杀掉内存占用较高的进程。
解决方法:
读取进程的/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+ VmStk )4
/proc/[pid]/status里的数值实际是按page来统计的,第二列为Resident(pages)—— 应用程序正在使用的物理内存的大小 VmRSS/4,为实际使用内存数值的四分之一。