软件开发的最后阶段就是测试,了解软件整体的cpu和mem使用情况,之前一直用ps来确定cpu使用率和rss内存,最近监控python多进程软件时,累积rss竟然超过了节点物理内存126G,原因在此处梳理下。
先说结论:一般情况下有:VSS >= RSS >= PSS >= USS
。
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
区别
- VSS : Virtual Set Size 虚拟耗用内存(包含共享库占用的内存),即单个进程全部可访问的地址空间,其大小可能包括还尚未在内存中驻留的部分。对于确定单个进程实际内存使用大小,VSS用处不大。
- RSS : Resident Set Size 实际使用物理内存(包含共享库占用的内存),即单个进程实际占用的内存大小,RSS不太准确的地方在于它包括该进程所使用共享库全部内存大小。对于一个共享库,可能被多个进程使用,实际该共享库只会被装入内存一次。
- PSS : Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)PSS相对于RSS计算共享库内存大小是按比例的。N个进程共享,该库对PSS大小的贡献只有1/N。
- USS : Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)即单个进程私有的内存大小,即该进程独占的内存部分。USS揭示了运行一个特定进程在的真实内存增量大小。如果进程终止,USS就是实际被返还给系统的内存大小。
监控
smem -k
USS是每个进程独自占用的内存,所有进程的PSS累加起来就应该是物理内存,资源监控可看这两个指标。
应用
执行如下命令,可监控多进程python软件的总内存使用情况(每分钟查询一次、共查5次)。
for i in {1..5};do echo `date && smem --userfilter="root" --processfilter="/opt/python2/bin/python2.7" -k -c "command uss pss rss" -t | tail -n -1` >> monitor.mem.log && sleep 1m;done
参考:
网友评论