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. SQL Server中时间段查询

    /****** Script for SelectTopNRows command from SSMS ******/ select * from dbo.VehicleData20100901 wh ...

  2. mysql联合索引

    命名规则:表名_字段名1.需要加索引的字段,要在where条件中2.数据量少的字段不需要加索引3.如果where条件中是OR关系,加索引不起作用4.符合最左原则 https://segmentfaul ...

  3. Objective-c Category(类别)

    NSStringUtilities.h: #import <Foundation/Foundation.h> @interface NSString(Utilities) -(BOOL) ...

  4. 编译android后找不到ramdisk-u.img[已解决]

    --- --- #!/bin/bash OUTDIR=out/target/product/tiny4412AHOSTBIN=out/host/linux-x86/bin # install vend ...

  5. CentOS5.5 下编译安装 LAMP

    大纲 1.安装gcc编译器 2.卸载rpm安装的http和mysql软件 3.编译安装php依赖包 4.安装apache软件 5.安装mysql软件 6.安装php软件 7.安装memcache ph ...

  6. hdu4649Professor Tian

    http://acm.hdu.edu.cn/showproblem.php?pid=4649 枚举当前状态是0或者是1的概率 其实就枚举1的概率 最后概率乘这个数 位运算用得不熟  老出错 #incl ...

  7. CSS3/SVG clip-path路径剪裁遮罩属性简介

    一.SVG属性和CSS3属性千丝万缕的关系 CSS3新增属性除了我们现在用的比较多的border-radius, box-shadow, gradient, ...之类,还有很重要的一个分支:SVG属 ...

  8. Nginx与X-Sendfile

    X-accel模块允许由后台通过返回的头来决定投递静态文件.为什么要这么做呢?试想一下我们经常碰到的这种情况,在有的论坛中,下载资源需要登录认证.权限核查.积分扣除或者是积分增加等等,对于Nginx来 ...

  9. HDU-4515 小Q系列故事——世界上最遥远的距离

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

  10. 【CSS】Intermediate6:Display

    1display :inline/block/none 2.inline value Cause all list items in a list to appear next to each oth ...