Skip to content
bash
ps aux --sort=-rss |head -10
ps aux --sort=-rss |head -10

VSZ是虚拟内存并不是实际占用的内存,RSS虽然是实际的内存,但是包括了共享的部分。而top命令中看到进程内存的百分比就是RSS内存占用总内存的百分比。

所以查看PostgreSQL进程占用的内存,正确的姿势应该是把共享的那部分内存给扣除掉,但是用ps命令没有办法扣除掉这部分内存。而实际上我们可以看/proc/pid/smaps文件中查看Pss内存,Pss表示的内存是把共享内存平分到各个进程上的内存,这实际上是这个进程占用的实际内存:

[root@pg01 ~]# cat /proc/12047/smaps |more
00400000-00ad1000 r-xp 00000000 fd:01 42123205                           /usr/pgsql-11.7/bin/postgres
Size:               6980 kB
Rss:                 528 kB
Pss:                  67 kB
Shared_Clean:        512 kB
Shared_Dirty:          0 kB
[root@pg01 ~]# cat /proc/12047/smaps |more
00400000-00ad1000 r-xp 00000000 fd:01 42123205                           /usr/pgsql-11.7/bin/postgres
Size:               6980 kB
Rss:                 528 kB
Pss:                  67 kB
Shared_Clean:        512 kB
Shared_Dirty:          0 kB