在 Linux 上监控内存开销时,存在多种指标,本文区分它们的定义、用途。
Linux 会准确记录每个进程占用的 CPU 时长,但统计一个进程占用的内存比较麻烦、有误差,常见的算法有 RSS、WSS 等。
虚拟集(Virtual Set Size,VSZ)
常驻集(Resident Set Size ,RSS)
ps -eo rss | awk 'NR>1' | awk '{sum+=$1} END {print sum/1024}'
SHR
比例集(Proportional Set Size,PSS)
工作集(Working Set Size ,WSS)
cat /sys/fs/cgroup/memory/memory.stat 可查看 Cgroup 的内存指标。memory.limit_in_bytes # 限制进程最大的内存使用量,取值为 -1 则不限制
memory.usage_in_bytes # 记录进程当前的内存使用量,包括 RSS、swap、Page Cache
memory.oom_control # 取值为 0 时,启用 OOM-killer ,当进程占用的内存超过限制时杀死它。取值为 1 时,禁用 OOM-killer ,只会暂停进程
container_memory_usage_bytes # 容器占用的全部内存,读取自 Cgroup 的 memory.usage_in_bytes 文件,等于 rss + swap + cache
container_memory_rss # 容器占用的 rss 内存,读取自 Cgroup 的 memory.stat 文件中的 total_rss 字段
container_memory_swap # 容器占用的 swap 内存
container_memory_cache # 容器占用的 Page Cache 内存
container_memory_working_set_bytes # 容器的工作集内存,等于 memory.usage_in_bytes - memory.stat.total_inactive_file
container_memory_usage_bytes = rss + swap + cache ,在总和 container_memory_usage_bytes 不变的情况下,容器可以减少 container_memory_cache ,继续增加 container_memory_rss 。