Oracle Swap居高不下处理

原文地址:https://blog.csdn.net/jamesyao008/article/details/40857625

环境描述:

SYSTEM: rhe5.3 x86_64bit
ORACLE:ORACLE 11.1.7.0

内存:8G 尴尬

现像:

现场运维发邮件回来前端应用缓慢,不时会抛出异常!

分析:

通过查看服务器进程使用情况发现一些进程使用内存相当高,通过vmstat 查询,系统层面已经大量使用Swap交换分区了。说明内存使用不足,系统层面反应也是比较缓慢

vmstat情况:

但查看Oracle进程查询没发现有消耗性能的SQL,

调整:

1:服务器内存:
2:调整/dev/shm
3:调整内核参数
4:调整数据库参数
5:监控DB情况

先为两台服务器增加16G内存,轮流重启服务器,完成内存增加后,修改SGA,hugepage size hugepage_setting.sh查询出vm.nr_hugepages = 6146

节点正常,但节点2不正常,和未增加内存前一样,Swap交换分区被大量使用。

解决:

通过分析及查询资料发现hugepage 没被使用

进一步分析 :还是与hugepage设置及系统参数有关:

 HugePages配置
进程需要访问内存的数据时,它的虚拟内存地址段先连接到page tables(Page Table是用来存放虚拟内存也和物理内存页对应关系的内存结构),然后再连接到物理内存。所以在访问内存时需要先访问page tables得到虚拟内存和物理内存的映射关系,然后再访问物理内存。page size越小,相应的内存结构也会越大,在RHEL 系统中,缺省为4k为一个单位,则物理内存越大,page tables相对越大。无形增加进程扫描内存的成本。
当物理内存大于8G时,建议使用hugepages配置,Hugepages的常见page size为2M,是4k size的500倍,所以可以大大减小page table的尺寸,提交扫描内存的效率。
同时CPU cache中有一部分TLB(Translation Lookaside Buffer)用来存放部分page table以提高这种装换的速度。因为page size变大了,所以同样大小的TLB,所覆盖的内存大小也变大了。提高了TBL命中率,也就是提高了地址转换的速度。
    HugePages配置方法:
1、在 /etc/security/limits.conf 增加memlock配置
* hard memlock unlimited
* soft memlock unlimited
 
2、利用官方的提供的脚本hugepages_settings.sh[ID 401749.1],计算需要配置的内存参数
$ ./hugepages_settings.sh  
......
Press Enter to proceed...
Recommended setting: vm.nr_hugepages = 6146
 
3、修改/etc/sysctl.conf 的项vm.nr_hugepages=6146
     sysctl -p;
     sysctl -a|grep -i huge
 
4、关闭实例及群集,重启系统。
 
5、对hugepages配置进行检查:
$ grep -i huge /proc/meminfo 
HugePages_Total:  6146
HugePages_Free:     15
Hugepagesize:     2048 kB
 
6、启动实例及数据库群集。
参考:
HugePages on Oracle Linux 64-bit [ID 361468.1]
Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration [ID 401749.1]

问题解决

猜你喜欢

转载自blog.csdn.net/cuiyan1982/article/details/81234872