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. leetcode面试准备: Maximal Rectangle

    leetcode面试准备: Maximal Rectangle 1 题目 Given a 2D binary matrix filled with 0's and 1's, find the larg ...

  2. c++模板实现抽象工厂

    类似于rime的rime::Class<factory type, product type>实现方式. C++模板实现的通用工厂方法模式 1.工厂方法(Factory Method)模式 ...

  3. 【HDOJ】1197 Specialized Four-Digit Numbers

    水题,暴力可解. #include <iostream> using namespace std; int chg(int n, int base); int main() { int i ...

  4. vim解决中文显示乱码问题

    命令:vim ~/.vimrc 写入如下: set enc=utf-8 set fileencoding=utf-8 set fileencodings=ucs-bom,utf8,prc set gu ...

  5. eight - zoj 1217 poj 1077

    学习了多位大牛的方法,看看到底能把时耗降到多少? A* // zojfulltest: 30000ms # include <stdio.h> # include <ctype.h& ...

  6. .Net 垃圾回收机制原理(一)

    英文原文:Jeffrey Richter 编译:赵玉开 链接:http://www.cnblogs.com/yukaizhao/archive/2011/11/23/dot_net_GC_1.html ...

  7. [c#美味] Guid ToString 格式知多少?

    在日常编程中,Guid是比较常用的,最常见的使用就是如下所示: string id = Guid.NewGuid().ToString(); 这条语句会生成一个新的Guid并转成字符串,如下: // ...

  8. 数组MARSHALLING z

    在托管代码和本地代码之间传递数组,是interop marshaling中间比较复杂的一个问题.本文从数组的定义开始,介绍数组marshalling的三种方法,并对blittable类型等概念做进一步 ...

  9. [MarsZ]程序猿谈大学之工作三年半的程序猿给大学童鞋的一些注释

    我本不是个喜欢写文章的人,更甭提写这种基本没技术含量的文章了.但是今天上班的时候,不经意浏览了下学校的QQ群,突然很想把自己的经验经历分享给还在大学里的同学,希望能让某些对前途职业迷茫的童鞋有所帮助. ...

  10. Linux设备驱动中的异步通知与异步I/O

    异步通知概念: 异步通知的意识是,一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上的“中断”概念,比较准确的称谓是“信号驱动的异步IO”,信号是在软件层次 ...