html tool

2017年8月20日星期日

读书笔记: 内存释放过程--os

释放内存

  • linux
    • 交换倾向
      • 页缓存
        • 文件系统缓存
      • 交换
        • 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的占用。

  • 分析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这个才是真实的进程可用内存,但由于涉及到文件数据读取问题,这个大可不一定程序可以正常使用,比如要加载的文件都没有被缓存,缓存发现内存不足。 
        工具
    • 页扫描
      • 连续的页扫描(超过10s),内存压力的预兆。
        linux: sar -B 中的
        • pgscank/s [被后台页面换出守护进程扫描的页面--kswapd]
          pgscand/s [直接扫描页面]
        solaris中 mstat 的 sr列
    • 换页
      • 系统内存低的进一步标准
      • 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]
        •   

没有评论:

发表评论