释放内存
- linux
- 交换倾向
- 页缓存
- 文件系统缓存
- 交换
- kswapd【页面换出守卫进程】执行的换页
- 工作方式: 找出最近不使用的页加入到空闲链表,其中包括应用程序内存。
- kswapd【页面换出守卫进程】执行的换页
- 交换倾向
- 参考:http://www.myjishu.com/?p=80
kswapd0进程的作用:它是虚拟内存管理中,负责换页的,
操作系统每过一定时间就会唤醒kswapd ,看看内存是否紧张,如果不紧张,则睡眠,
在 kswapd 中,有2 个阀值,pages_hige 和 pages_low,当空闲内存页的数量低于 pages_low的时候,kswapd进程就会扫描内存并且每次释放出32 个free pages,直到 free page 的数量到达pages_high。
设置:内存使用到多少开始使用swap? vm.swappiness 这个内核参数控制 /proc/sys/vm/swappiness
- 默认: 60 [linux 4.2.0-42-generic #49~14.04.1-Ubuntu ]
该参数从0到100,当该参数=0,表示只要有可能就尽力避免交换进程移出物理内存;该参数=100,这告诉内核疯狂的将数据移出物理内存移到swap缓存中。The defaultvalue I’ve seen on both enterprise level Red Hat and SLES servers is 60.
To find out what the default value is on aparticular server, run:
sysctl vm.swappiness
The value is also located in/proc/sys/vm/swappiness.PS:设置vm.swappiness=0 后并不代表禁用swap分区,只是告诉内核,能少用到swap分区就尽量少用到,设置vm.swappiness=100的话,则表示尽量使用swap分区,默认的值是60调整内存参数,当内存使用率不足10%(开始是默认值60)时在使用swap,尽量避免使用swap,减少唤醒软中断进程,从而降低ksoftirqd进程对cpu的占用。
- 默认: 60 [linux 4.2.0-42-generic #49~14.04.1-Ubuntu ]
- 参考:http://www.myjishu.com/?p=80
- 页缓存
- 交换倾向
-
分析tool
- vmstat
- 默认单位:KB
- swpd:交换出的内存量
- free空闲的可用内存
- buff 用于缓冲缓存的内存[文件系统写能力使用参考P285]
- cache 用于页缓存的内存[提供文件系统读能力]
- si匿名换页中的换入内存
- so匿名换页中的换出内存
- free
- 参考:http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html
free输出的第二行是从一个应用程序的角度看系统内存的使用情况。- 对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
- 对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存;
因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。这里还用两个等式:- FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
- FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]
这二者都不难理解。[popexizhi]这样看来 +/-buffers/cache这个才是真实的进程可用内存,但由于涉及到文件数据读取问题,这个大可不一定程序可以正常使用,比如要加载的文件都没有被缓存,缓存发现内存不足。
- 参考:http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html
- 页扫描
- 连续的页扫描(超过10s),内存压力的预兆。
linux: sar -B 中的
-
pgscank/s [被后台页面换出守护进程扫描的页面--kswapd]
pgscand/s [直接扫描页面]
-
pgscank/s [被后台页面换出守护进程扫描的页面--kswapd]
- 连续的页扫描(超过10s),内存压力的预兆。
- 换页
- 系统内存低的进一步标准
- linux- vmstat(8) 的 si和so -- 这里是匿名换页
- solaris: vmstat -p 按类型显示换页,检查匿名换页
- vmstat(1) 的 free
- OOM[linux]
- linux的 /var/log/message中grep “Out of memory”
- dmesg(1) |grep "Out of memory"
- 交换[solaris]
- solaris : vmstat 的w列,显示交换出的线程数。
- mstat -S 的 si/so
- top/prstat
- 查找进程和用户是常驻物理内存和虚拟内存最大使用者[ps aux 中 RSS --常驻集合大小(KB);VSZ 虚拟内存大小(KB)]
- dtrace/stap/perf
- 确认内存使用原因
- perf使用[next]
- 确认内存使用原因
- vmstat
没有评论:
发表评论