这个标题可能不是很准确,性能之巅这本书最重要的其实是要让读者掌握一些方法论。方法论其实还是很重要,但是看着着实是有些累。
一些观测命令是多方面的统计信息,这一节聊的是内存,所以就只关注内存相关的信息,后续还是要整理一下常用的一些工具以及要关注的事项
# 默认是以KB为单位统计内存相关信息,使用`-S`选项修改输出展示的单位
vmstat 1 -Sm
swpd 交换出的内存量
free 空闲的可用内存
buff 用于缓冲缓存的内存
cache 用于页缓存的内存
si 换入的内存(换页)
so 换出的内存(换出)
系统启动后空闲内存的下降往往是被用于缓存(缓冲和页缓存)以提高性能,需要时会被释放以供应用程序使用,故此是正常现象。
si和so一直非0,那么系统正存在内存压力并换页到交换设备或文件。
sar
该工具也是足够强,直接上图算了
- -B 换页统计信息
- -H 大页面统计信息
- -r 内存使用率
- -R 内存统计信息
- -S 交换空间统计信息
- -W 交换统计信息
最好的说明文档应该是man sar
slabtop
通过slab分配器输出内核slab缓存使用情况。
貌似有了解到这个slab分配器在最新的linux内核版本不是默认的分配器,而是被其他分配器替换,这一块儿先记一笔
- OBJS 对象数量
- ACTIVE 活动的对象数量
- USE 使用百分比
- OBJ SIZE 对象大小,字节
- CACHE SIZE 缓存大小
slab统计信息源自/proc/slabinfo
,使用-sc
按缓存大小排序最大值再最顶端,用vmstat -m
也可以输出相关信息
ps
ps aux
ps -eo pid,pmem,vsz,rss,comm
- MEM:主存使用(物理内存、RSS)占用内存的百分比
- RSS:常驻集合大小(KB);显示主存使用,包括如系统库在哪点映射共享段(可能被多个进程共享,会被重复计算故而RSS求和会超过系统内存总和)
- VSZ:虚拟内存大小(KB)
pmap
列出进程的内存映射,显示大小、权限及映射的对象
pmap -x $pid
kBytes:虚拟内存
RSS:主内存
Anon:私有匿名内存
Mode:权限
对于大部分映射很少有内存是匿名的,而且大部分都是只读(r-x);这意味着这些页面可以被其他进程共享,尤其是系统库。