进程的占用内存: VSS, RSS, PSS, USS释义缩写全称含义VSSVirtual Set Size进程申请的虚拟内存总量含未实际分配的RSSResident Set Size进程实际占用的物理内存含共享库PSSProportional Set Size物理内存中共享部分按进程数平均分配后的数值USSUnique Set Size进程独占的物理内存共享库不算VSS (Virtual Set Size)它是一个进程能访问的所有内存空间地址的大小。这个大小包含了一些没有驻留在RAM中的内存就像mallocs已经被分配但还没有写入。VSS很少被用来测量程序的实际使用内存。RSS (Resident Set Size)RSS是一个进程在RAM中实际持有的内存大小。RSS可能会产生误导因为它包含了所有该进程使用的共享库所占用的内存一个被加载到内存中的共享库可能有很多进程会使用它。RSS不是单个进程使用内存量的精确表示。PSS (Proportional Set Size)它与RSS不同它会按比例分配共享库所占用的内存。例如如果有三个进程共享一个占30页内存控件的共享库每个进程在计算PSS的时候只会计算10页。PSS是一个非常有用的数值如果系统中所有的进程的PSS相加所得和即为系统占用内存的总和。当一个进程被杀死后它所占用的共享库内存将会被其他仍然使用该共享库的进程所分担。在这种方式下PSS也会带来误导因为当一个进程被杀后PSS并不代表系统回收的内存大小。USS (Unique Set Size)这部分内存完全是该进程独享的。USS是一个非常有用的数值因为它表明了运行一个特定进程所需的真正内存成本。当一个进程被杀死USS就是所有系统回收的内存。USS是用来检查进程中是否有内存泄露的最好选择。如何查看1. 查看 VSS 和 RSS方法-1. ps命令ps-opid,vsz,rss,comm-pPID实例-1$ps-opid,vsz,rss,comm-p149277PID VSZ RSS COMMAND14927727681948a.out方法-2. 直接读 /proccat/proc/PID/status|grep-EVmSize|VmRSS实例-2$cat/proc/149277/status|grep-EVmSize|VmRSSVmSize:2768kB VmRSS:1948kB2. 查看PSS(需内核支持)新内核(4.15), 有 smaps_rollup, 直接看总和cat/proc/PID/smaps_rollup|grep-ERss|Pss实例-3$cat/proc/149277/smaps_rollup|grep-ERss|PssRss:1948kB Pss:160kB Pss_Dirty:100kB Pss_Anon:100kB Pss_File:60kB Pss_Shmem:0kB SwapPss:0kB老内核需要逐段累加 smapscat/proc/PID/smaps|grep^Pss:|awk{sum$2} END {print PSS:, sum, kB}实例-4$cat/proc/149277/smaps|grep^Pss:|awk{sum$2} END {print PSS:, sum, kB}PSS:156kB3. 查看USSUSS没有直接字段等于 Private_Clean Private_Dirty新内核cat/proc/PID/smaps_rollup|grep-EPrivate_Clean|Private_Dirty实例-5$cat/proc/149277/smaps_rollup|grep-EPrivate_Clean|Private_DirtyPrivate_Clean:12kB Private_Dirty:100kB老内核cat/proc/PID/smaps|grep-EPrivate_Clean|Private_Dirty|awk{sum$2} END {print USS:, sum, kB}实例-6$cat/proc/149277/smaps|grep-EPrivate_Clean|Private_Dirty|awk{sum$2} END {print USS:, sum, kB}USS:112kB最后附上这个进程149277的源码#includestdio.h#includeunistd.hintmain(){unsignedinti0;for(;;){i1;printf(%d: Hello World\n,i);sleep(1);}}(END)