free 命令解释
total used free shared buffers cached
Mem: 33573032 33036556 536476 308 1086852 17157592
-/+ buffers/cache: 14792112 18780920
Swap: 2103292 87940 2015352
第一行是内存总体使用情况。
第二行表示除开 buffers和cache 的使用情况
第三行是交换区使用情况。
linux 策略是内存最大使用,将应用缓存也放在内存中,少读交换区。 缓存是可以被释放的,有其它应用启动时就可以挤出来,所以第二行的 free 是真实的还可以被使用的内存。
但这里有个问题,就是有些应用不怎么运行时,本身会释放内存,也就是它占用的内存比实际需要的内存要少,当它运行起来时,就需要更多的内存,这时拿不到内存的话,程序就会报错。
交换区也可看作内存的延伸,只是比较慢。所以第二行的 free 加上 第三行的 free 后比较小的话,就很危险了,程序随时会报错。
例如 java 程序,设了内存最大使用 2G,平时不运行时,实际内存占用较少(指减去buffers和cache,在top命令显示RES一列),运行起来时就要向系统索取 2G 内存,如果内存不足,就会抛相应的内存异常。
还有情况是,buffer/cache 是某些网络和必要文件的缓存,这种缓存是释放不了的,不然会报错。
看进程内存使用
top shift+m 按内存使用率排序 VIRT:应用虚拟内存空间大小, RES:物理内存
pmap <pid> 可查看进程详细内存使用情况,非常细,平时不太需要用到
ps -eo pid,user,%mem,vsz,rss|grep <pid> vsz: 应用虚拟内存空间大小 rss: 物理内存
ps -aux|grep <pid> 与上一命令基本等效。
cat /proc/<pid>/status
vmsize 应用虚拟内存空间大小,对应ps的 vsz;vmrss 物理内存