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. SPRING IN ACTION 第4版笔记-第五章BUILDING SPRING WEB APPLICATIONS-002-Controller的requestMapping、model

    一.RequestMapping 1.可以写在方法上或类上,且值可以是数组 package spittr.web; import static org.springframework.web.bind ...

  2. Hadoop中的各种排序

    本篇博客是金子在学习hadoop过程中的笔记的整理,不论看别人写的怎么好,还是自己边学边做笔记最好了. 1:shuffle阶段的排序(部分排序) shuffle阶段的排序可以理解成两部分,一个是对sp ...

  3. MS-DOS 7.10完整安装版(含图文安装程序)

    大家知道,要想学习或使用DOS,安装一个DOS并进行实际操作是非常必要的.MS-DOS 7.10是一个非常好且强大实用的操作系统,而且兼容性和性能都十分强.要在系统中安装MS-DOS 7.10,可以使 ...

  4. Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数

    话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功 ...

  5. 物联网操作系统HelloX V1.77(beta)版本发布

    物联网操作系统HelloX V1.77发布 经过近半年的努力,物联网操作系统HelloX V1.77版本正式完成,源代码已上载到github(github.com/hellox-project/Hel ...

  6. MySQL海量数据查询优化策略

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  7. 一步步写STM32 OS【一】 序言

    一直想写个类似uCOS的OS,近段时间考研复习之余忙里偷闲,总算有点成果了.言归正传,我觉得OS最难的部分首先便是上下文切换的问题,他和MCU的架构有关,所以对于不同的MCU,这部分需要移植.一旦这个 ...

  8. spring--AOP2--6

    AOP 之 6.6 通知参数 前边章节已经介绍了声明通知,但如果想获取被被通知方法参数并传递给通知方法,该如何实现呢?接下来我们将介绍两种获取通知参数的方式. 使用JoinPoint获取:Spring ...

  9. python调用系统命令 shell命令

    使用python调用系统命令,基本有3种选择: 1. 使用os模块的system方法 import os os.system('ls') 2. 使用os模块的popen方法 import os os. ...

  10. Prism简介

    Prism是由微软Patterns & Practices团队开发的项目,目的在于帮助开发人员构建松散耦合的.更灵活.更易于维护并且更易于测试的WPF应用或是Silverlight应用以及Wi ...