Unit 11 Memory Caches 内存缓存
 
        学习目标:
 
              A. 使用内存来改善运行慢的子系统的服务时间
 
11.1 Strategies for using memory 内存使用策略
A.      减少内存使用者负载
a.       slab cache 分配缓存
B.      减少或延时运行慢的子系统的服务时间
a.       Filesystem metadata文件系统源数据:buffer cache(slab cache)
b.       Disk IO: page cache
c.       Interprocess communications进程间通信:shared memory共享内存
d.       Network IO: buffer cache, arp cache, connection tracking
C.      调整内存要注意的:
a.       怎么样回收页面才能避免内存的压力
b.       IO速度慢要怎么做?
1) 对于小的写入调整内存效果不是很明显
2) 对于大的数据写入使用重排序更有效。
影响磁盘IO最主要的因素是page cache.
 
                                                     
11.2  A closer look at demand paging 页面调度
       A.      只有进程要存储数据时才分配页面框给进程
a.       常驻页面是存放在主存(RAM)里面的
b.       非常驻页面是放在磁盘上面或者没在使用的。
                   B.允许内存过量使用系统内存
                          a. 对科学计算应用方面很有帮助。
                          b. 有利于执行程序与内存的地址参照
                         c. 当进程存储数据时不会用到Memory(RAM+swap).
     
 
11.3 Tuning page allocation 页面分配
A.      参数设置
vm.min_free_kbytes 内存最小保留空间
B.      运用
应用程序会不定期分配和使用大内存块。
C.      结论:
a.       减少页面调度的服务时间
b.       内存最小保留空间不能被其它程序使用。
c.       内存最小保留空间过大的话会给ZONE_NORMAL造成压力。
 
 
11.4 Tuning overcommit 调整overcommit
A.      参数设置
vm.overcommit_memory:
a. 0=henuristic overcommit   默认值,程序运行时如内存不够分配则拒绝并报警。
b. 1=always overcommit     应用程序要多少就分配多少,不管内存够不够。
 
c. 2=commit all swap plus a percentage of RAM (may be >100)
vm.overcommit_ratio 默认值为50, swp+RAM*50%
B.      在/proc/meminfo里查看committed_AS
作用:评估在当系统负载下需要多少内存以避免内存溢出。
C.      结论:
a.       允许内核满足对大虚拟地址空间的请求
b.       警告:当内存溢出或内存过量使用时进程会崩溃。
 
 
11.5 Slab cache 缓存分配
A.        slab用来存放内核当中的表对象。
a.       频繁申请分配页面的对象减少负担(slab缓存之)
b.       例如:filesystem metadata(dentry and inode caches)
B.        监视:
cat /proc/slabinfo
slabtop
vmstat –m
 
下面命令查看内核是否支持slab:
grep CONFIG_SLAB /boot/config-*
 
 
11.6 ARP cache   ARP缓存表
     A. ARP表是用来映射硬件地址与协议地址的(MAC----IP)
         a. ARP表缓存在slab里面( grep arp /proc/slabinfo)
         b. 垃圾过滤器会定时删除表里旧的或过期的表项。
     B.ARP缓存不足的话会导致:
         a. 主机间通讯间歇性延时。
         b. ARP表不稳定.
     C. ARP缓存太大会给ZONE_NORMAL造成压力。
     D. 查看ARP表项:
         ip neighbor list
         cat /proc/net/arp
     E. 清空ARP表
          Ip neighbor flush dev eth0
 
 
11.7 Tuning ARP cache    ARP缓存调整
     A. Soft upper limit软限制
         net.ipv4.neigh.default.gc_thresh2 默认值512(条) :arp表项条数
          达到这个值后过5秒钟才清除
B. Hard upper limit 硬限制  
net.ipv4.neigh.default.gc_thresh3 默认值1024
C.        表项垃圾清除间隔时间(秒)
net.ipv4.neigh.default.gc_interval 默认值30秒
 
注:达到限制值128后每30秒清除一次ARP表
 
 
11.8 Page cache 页面缓存
A.      大部份页面活动都是由于I/O操作产生的。
a. 读文件:文件从磁盘读到内存
b. 读进来的这些数据页面都放在页面缓存里面
            B. 页面缓存总是会去检查IO请求情况
                a. 目录读取
                b. 常规文件读写
                c. 块设备文件读写
                d. 访问内存映射文件
                e. 访问swap 页面。
            C. 页面缓存里面的页存放的都是跟file data 有关的数据.
 
 
11.9 Tuning page cache 页面缓存调整
A.      查看分配给页面缓存使用的地址大小 /proc/meminfo
B.      调整page cache在内存中分配的长度/大小
     vm.lowmem_reserve_ratio   分配给page cache 的大小
     vm.vfs_cache_pressure      虚拟内存回收director和inode缓冲的倾向,越大越易回收。
C.      调整到达率/完成率
vm.page-cluster 默认值3,2^3 单位:pages ,必须是2^n,与内存一次交换多少页。
vm.zone_reclaim_mode 页面回收
 
        
11.10          Anonymous pages 匿名页
A.      匿名页里存放的是其它进程的消耗性的数据
B.      存放的数据跟文件无关,但包括:
a. 程序数据—阵列,堆地址等等
b. 匿名内存范围
c. 脏页
d. 进程间通讯的共享内存范围
            C. 查看使用量
               grep Anon /proc/meminfo
               cat /pro/PID/statm
D.     匿名页可以与swap交换数据.
Anonymous pages = RSS – Shared
 
 
11.11          SysV IPC 进程间通讯
A.      以下情况比较消耗内存
a.       Semaphores 信号量 :协调进程间对共享资源的抢占
b.       Message queues 消息队列:进程间交换信息
c.       Share memory 共享内存:进程间所要访问的数据在内存当中的同一地方s
B.      查看SysV共享内存
ipcs     查看当前正在使用的情况
ipcs –l    查看共享内存的限制情况
C.      使用POSIX共享内存文件系统做一个最快的存储
dd if=/dev/zero 0f=/dev/shm/test bs=1M count=50
共享内存文件系统路径:/dev/shm 可以读写数据但重启后数据丢失。
 
 
11.12 Tuning SysV IPC 进程间通讯性能调整
A.        设置信号量数量(flags)
Kernel.sem
每个信号量集合的最大信号量数,默认为250,
整个系统所允许的最大信号量数,默认为32000,
每次IPC调用影响的信号量的最大数,默认为32,
信号量集合的最大数,默认为128。
注:运行高并发应用程序时(如:数据库),将系统的最大信号量数调大,以减少进程间对信号量的争抢
B.        消息数量与大小(non-pageable)
Kernel.msgmni=16,最大消息队列数,默认16
Kernel.msgmnb=16384,单个消息队列的最大字节数,默认16384,
Kernel.msgmax=8192,最大消息长度(整个消息块大小)。默认8192,
注:适用于少量数据交换
             C.共享内存大小与数量
                Kernel.shmni=4096,系统范围内共享内存段的最大数量,默认4096,
                Kernel.shmmax每个共享内存段的最大尺寸(单位:字节)。。
                Kernel.shmall=2097152,共享内存页面数(系统一次可以共享内存的总量,单位:页,SHMMAX/PAGE_SIZE),默认2097152                  
 注:适用于海量数据交换(如:oracle数据库)
 
 
11.13 Viewing memory with free 查看内存释放情况
A.      用free -ltm 命令查看内存使用的总体情况
B.      计算/buffers/cache 单位(MiB)
used=used – bufers – cached
free= free + buffers + cached
 
grep –i memory /var/log/dmesg
grep e820 /var/log/dmesg
 
 
11.14          Other commands to view memory usage 查看内存使情况其它命令
A.      查看系统内存
cat /proc/meminfo
cat /proc/zoneinfo
a.       总的物理内存
b.       内存缓存大小
c.       正在使用的与未使用的
B.      pages tables 页表
cat /proc/vmstat
C.      Summary 汇总
vmstat –s
D.     IO devices IO设备
cat /proc/iomem
 

RHCA442学习笔记-Unit11内存缓存的更多相关文章

  1. RHCA442学习笔记-Unit11内存回收

       Unit 12 Memory Reclamation 内存回收            学习目标:                    A. 了解和调整内存回收                  ...

  2. RHCA442学习笔记-Unit10内存地址及分配

      Unit 10 Memory Addressing and Allocation 内存地址及分配 学习目标: A. 虚拟地址与物理地 B. 调整内存地址分配 C. 解析内存溢出    10.1 O ...

  3. MySQL学习笔记-数据库内存

    数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...

  4. linux kernel学习笔记-5内存管理_转

    void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. km ...

  5. SpringBoot学习笔记:Redis缓存

    SpringBoot学习笔记:Redis缓存 关于Redis Redis是一个使用ANSI C语言编写的免费开源.支持网络.可基于内存亦可以持久化的日志型.键值数据库.其支持多种存储类型,包括Stri ...

  6. mybatis学习笔记(14)-查询缓存之中的一个级缓存

    mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...

  7. XV6学习笔记(2) :内存管理

    XV6学习笔记(2) :内存管理 在学习笔记1中,完成了对于pc启动和加载的过程.目前已经可以开始在c语言代码中运行了,而当前已经开启了分页模式,不过是两个4mb的大的内存页,而没有开启小的内存页.接 ...

  8. Dubbo -- 系统学习 笔记 -- 示例 -- 结果缓存

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 结果缓存 结果缓存,用于加速热门数据的访问速度,Dubbo提供声明式缓存,以减少用 ...

  9. SQLite学习笔记(六)&&共享缓存

    介绍 通常情况下,sqlite中每个连接都会一个独立的pager对象,pager对象中管理了该连接的缓存信息,通过pragma cache_size指令可以设置缓存大小,默认是2000个page,每个 ...

随机推荐

  1. Android开发之注解式框架ButterKnife在ADT中的设置

    使用注解式框架ButterKnife的时候,导入到ADT中,结果项目中注解的view无效,如点击button等无任何的反应. 然后在ButterKnife的官网查看到解决办法:http://jakew ...

  2. 阿里巴巴SUI Mobile的使用

    1.引入文件 <link rel="stylesheet" href="./css/sm.min.css"> <link rel=" ...

  3. bzoj1976

    终于忙完期末考试了,即将进入愉快的暑假(虽然暑假作业奇多,但好歹终于能有大量时间刷题了) 先把上次新一类最小割留下的一道题目A了复习一下: 题目看起来很复杂,实际上和bzoj2132是同一个类型的 用 ...

  4. Win系统下制作U盘CLOVER引导+安装原版Mavericks10.9

    啃苹果有一段时间了,之前一直用白苹果,但是白苹果配置有所限制,对于我搞音频的人来讲,显得有点拖沓.所以研究了将近2年的黑苹果,最近心血来潮给大家一个比较傻瓜式的教程,首先强调一点,黑苹果是需要折腾的, ...

  5. [HUST 1017] Exact cover

    Exact cover Time Limit: 15s Memory Limit: 128MB Special Judge Submissions: 6012 Solved: 3185 DESCRIP ...

  6. Jquery 输入金额格式限制 插件

    (function($) { $.fn.extend({ money_mode: function(options) { var defaults = { decimal_length: 2,//小数 ...

  7. Paxos算法(转)

    Paxos算法的难理解与算法的知名度一样令人敬仰,从我个人的经历而言,难理解的原因并不是该算法高深到大家智商不够,而在于Lamport在表达该算法时过于晦涩且缺乏一个完整的应用场景.如果大师能换种思路 ...

  8. codeforces 652C Foe Pairs 水题

    题意:给你若干个数对,给你一个序列,保证数对中的数都在序列中 对于这个序列,询问有多少个区间,不包含这些数对 分析:然后把这些数对转化成区间,然后对于这些区间排序,然后扫一遍,记录最靠右的左端点就好 ...

  9. [King.yue]EXT.Grid行双击事件

    .Listeners(l => {l.CellDblClick.Handler = string.Format(@"alert('xx');"); })

  10. Asm Shader Reference --- Shader Model 3.0 part

    ps部分 概览   Instruction Set                                       Name Description Instruction slots S ...