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. 目录重定向的源代码工程( linux平台利用VFS实现目录重定向驱动)虚拟磁盘MINIPORT驱动代码(雨中风华)

    http://download.csdn.net/user/fanxiushu/uploads/2 http://download.csdn.net/user/fanxiushu/uploads/1

  2. html5 高级动画精灵

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  3. 为什么要重写equals()方法与hashCode()方法

    在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写equals方法我们是继承了object ...

  4. ActionBar官方教程(7)自定义操作项的view,如何得到它及处理它的事件

    Adding an Action View An action view is a widget that appears in the action bar as a substitute for ...

  5. cgi ISAP sapi等

    1.CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等 2.而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称 ...

  6. 【随笔】这段时间没有写博客是因为一边看Qt5的帮助文档一边写小程序

    长话短说,因为和做程序员的以前的同学联系了一下,知道自己有很多不足,加之接到一个培训机构的人打来的电话稍微打击了一下,虽然那个人满嘴跑火车想装做和我很谈得来,但是我依然看到了自己没有写过任何命令行以外 ...

  7. apache开源项目--kylin

    Kylin 是一个开源的分布式的 OLAP 分析引擎,来自 eBay 公司开发,基于 Hadoop 提供 SQL 接口和 OLAP 接口,支持 TB 到 PB 级别的数据量. Kylin 是: 超级快 ...

  8. 《C#并行编程高级教程》第7章 VS2010任务调试 笔记

    没有什么好说的,主要是将调试模式下的Parallel Tasks窗体和Parallel Stacks窗体.折腾一下应该比看书效果好.(表示自己没有折腾过) 另外值得注意的是,主线程不是一个任务.所以主 ...

  9. Android ImageView的属性android:scaleType

    ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType) imageView.setScaleType(Im ...

  10. Oracle10g数据类型

    1.     字符类型 数据类型 长度 说明 CHAR(n BYTE/CHAR) 默认1字节,n值最大为2000 末尾填充空格以达到指定长度,超过最大长度报错.默认指定长度为字节数,字符长度可以从1字 ...