在开发和运维过程中,经常会遇到的问题是一个进程到底占用了多大的内存。以下通过常用的2个命令来说明如何获取进程占用的内存
比如有一个java进程,它的pid=7020
$ps -ef | grep LogAgent | grep ^grepusrapp 7020 1 0 15:23 ? 00:00:02 java -jar LogAgent.jar
$ps -o vsz,rss,sz,size,pid -q7020VSZ RSS SZ SIZE PID4444604 39160 1111151 4268292 7020
name | description |
vsz | virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject to change. (alias vsize). |
rss | resident set size, the non-swapped physical memory that a task has used (in kiloBytes). (alias rssize, rsz). |
sz | size in physical pages of the core image of the process. This includes text, data, and stack space. Device mappings are currently excluded; this is subject to change. See vsz and rss. |
size | approximate amount of swap space that would be required if the process were to dirty all writable pages and then be swapped out. This number is very rough! |
其中最关注的是RSS,它是实际占用的物理内存的大小。
$top -n 1 -p 7020top - 16:29:32 up 166 days, 5:59, 3 users, load average: 0.25, 0.31, 0.48Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.0 us, 3.4 sy, 0.0 ni, 96.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 7388532 total, 158576 free, 5822636 used, 1407320 buff/cacheKiB Swap: 16777212 total, 12173780 free, 4603432 used. 1012880 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND7020 usrapp 20 0 4444604 39160 12444 S 0.0 0.5 0:02.15 java
ps. VSZ=top.VIRTps. RSS=top.RES
参考文档