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