ITPub博客

首页 > 数据库 > Oracle > [20210428]AnonHugePages与transparent hugepage.txt

[20210428]AnonHugePages与transparent hugepage.txt

原创 Oracle 作者:lfree 时间:2021-04-28 11:01:11 0 删除 编辑

[20210428]AnonHugePages与transparent hugepage.txt

--//链接:http://www.itpub.net/thread-2141545-4-1.html上的讨论,对方数据库运行缓慢。
--//实际上数据库上还运行一个ES(ElasticSearch)的东西,导致整个系统IO不行。

--//我看了链接,做一些转抄:
# free -m
             total       used       free     shared    buffers     cached
Mem:        128955     116**      12853      39265        123      41276
-/+ buffers/cache:      74701      54253
Swap:        20479      18439       2040           

# grep -i huge /proc/meminfo
AnonHugePages:  68372480 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//68372480/1024/1024 = 65.20G.
--//明显没有使用HugePages,但是很奇怪AnonHugePages使用很大。导致这个系统内存消耗很大,这样留给数据库的内存相对很小。
--//而且还可以发现swap的used已经达到18g,也说明可能数据库的一些IO实际上访问的交换,从vmstat的输出看又看不出来si,so列。

--//我看了我们各个生产系统,发现exadata
#  cat /proc/version
Linux version 2.6.39-400.126.1.el5uek (mockbuild@ca-build56.us.oracle.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-52)) #1 SMP Fri Sep 20 10:54:38 PDT 2013

#  grep -i page /proc/meminfo
AnonPages:      36422176 kB
PageTables:      2596604 kB
HugePages_Total:   70540
HugePages_Free:     3401
HugePages_Rsvd:     3391
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//36422176/1024/1024 = 34.73G.
--//你可以发现没有对方显示的AnonHugePages列,很容易将这个问题与TRANSPARENT_HUGEPAGE联系起来,oracle的一些安装文档要求关闭
--//TRANSPARENT_HUGEPAGE特性的。

#  grep -i hugepage config-2.6.39-400.126.1.el5uek
# CONFIG_TRANSPARENT_HUGEPAGE is not set
--//你可以发现exadata使用的内核连TRANSPARENT_HUGEPAGE都没有设置.grep -i page /proc/meminfo没有出现AnonHugePages也正常了.
--//是否其它服务器要关闭TRANSPARENT_HUGEPAGE吗?我觉得没必要.原因如下:
--//1.没有因为打开出现问题,尽管oracle有一些文档提到要关闭它,也许是早期版本它有一些问题.
--//2.理论讲使用它能减少PageTables的大小,节约内存使用.

--//我发现大量oracle连接进程在打开TRANSPARENT_HUGEPAGE的情况下,使用AnonHugePages.在我的测试环境测试看看.

1.环境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

# uname -a
Linux xxxxdg 2.6.39-300.26.1.el5uek #1 SMP Thu Jan 3 18:31:38 PST 2013 x86_64 x86_64 x86_64 GNU/Linux

# grep -i hugepage /boot/config-2.6.39-300.26.1.el5uek
CONFIG_TRANSPARENT_HUGEPAGE=y
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set
--//可以发现我的测试环境配置了TRANSPARENT_HUGEPAGE。

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
--//缺省是打开的.要关闭执行如下:
--//# echo never >| /sys/kernel/mm/transparent_hugepage/enabled

2.测试:
--//注我做了N多尝试,不知道什么操作能激活使用transparent_hugepage,偶尔产生几次,但是无法重复,最终我放弃这样的测试。
--//尝试查看一些生产系统的情况:

# ps -ef | grep oracleywdb1 | awk '{print $2}' | xargs -IQ egrep "AnonHugePages|Rss"  /proc/Q/smaps | paste - - | awk '{ if($5>0) print $0} '| head
Rss:                2380 kB     AnonHugePages:      2048 kB
Rss:                2444 kB     AnonHugePages:      2048 kB
Rss:                2376 kB     AnonHugePages:      2048 kB
Rss:                2376 kB     AnonHugePages:      2048 kB
Rss:                2376 kB     AnonHugePages:      2048 kB
Rss:                2376 kB     AnonHugePages:      2048 kB
Rss:                2372 kB     AnonHugePages:      2048 kB
Rss:                2364 kB     AnonHugePages:      2048 kB
Rss:                2376 kB     AnonHugePages:      2048 kB
Rss:                2376 kB     AnonHugePages:      2048 kB
--//使用head截断,不然输出太多。可以大概猜测Rss占用大于2M的情况下,自动开启AnonHugePages。
--//能力有限,只能做如上猜测。在测试环境查看:
# ps -ef | grep oracleboo[k] | awk '{print $2}' | xargs -IQ egrep "AnonHugePages|Rss"  /proc/Q/smaps | paste - - | awk '{ if($5>0) print $0} '
--//没有输出,也就是普通oracle用户进程没看到,实际上如何产生使用它,我不是很清楚。

# ps -ef | grep ora[_] | awk '{print $2}' | xargs -IQ egrep -H "AnonHugePages|Rss"  /proc/Q/smaps | paste - - | awk '{ if($5>0) print $0} '
/proc/18047/smaps:Rss:                2076 kB   /proc/18047/smaps:AnonHugePages:      2048 kB
/proc/18049/smaps:Rss:                2088 kB   /proc/18049/smaps:AnonHugePages:      2048 kB
/proc/18051/smaps:Rss:                2076 kB   /proc/18051/smaps:AnonHugePages:      2048 kB
/proc/18053/smaps:Rss:                2116 kB   /proc/18053/smaps:AnonHugePages:      2048 kB
/proc/18055/smaps:Rss:                2188 kB   /proc/18055/smaps:AnonHugePages:      2048 kB
/proc/18057/smaps:Rss:                8372 kB   /proc/18057/smaps:AnonHugePages:      8192 kB
/proc/18059/smaps:Rss:                8080 kB   /proc/18059/smaps:AnonHugePages:      6144 kB
/proc/18061/smaps:Rss:                8432 kB   /proc/18061/smaps:AnonHugePages:      8192 kB
/proc/18063/smaps:Rss:                2088 kB   /proc/18063/smaps:AnonHugePages:      2048 kB
/proc/18069/smaps:Rss:                2116 kB   /proc/18069/smaps:AnonHugePages:      2048 kB
/proc/18073/smaps:Rss:                2116 kB   /proc/18073/smaps:AnonHugePages:      2048 kB
/proc/18077/smaps:Rss:                2180 kB   /proc/18077/smaps:AnonHugePages:      2048 kB
/proc/18085/smaps:Rss:                2116 kB   /proc/18085/smaps:AnonHugePages:      2048 kB
/proc/18087/smaps:Rss:                2116 kB   /proc/18087/smaps:AnonHugePages:      2048 kB
/proc/18104/smaps:Rss:                2104 kB   /proc/18104/smaps:AnonHugePages:      2048 kB
/proc/20316/smaps:Rss:                2116 kB   /proc/20316/smaps:AnonHugePages:      2048 kB
--//后台进程有使用。
--//看看是那些后台进程:
# ps -ef | grep ora[_] | awk '{print $2}' | xargs -IQ egrep -H "AnonHugePages"  /proc/Q/smaps | awk '{ if($2>0) print $0} ' | awk -F'/' '{print $3}'| paste -sd, | xargs ps -fp
UID        PID  PPID  C STIME TTY          TIME CMD
oracle   18047     1  0 09:05 ?        00:00:00 ora_gen0_book
oracle   18049     1  0 09:05 ?        00:00:00 ora_diag_book
oracle   18051     1  0 09:05 ?        00:00:00 ora_dbrm_book
oracle   18053     1  0 09:05 ?        00:00:03 ora_dia0_book
oracle   18055     1  0 09:05 ?        00:00:00 ora_mman_book
oracle   18057     1  0 09:05 ?        00:00:00 ora_dbw0_book
oracle   18059     1  0 09:05 ?        00:00:00 ora_dbw1_book
oracle   18061     1  0 09:05 ?        00:00:00 ora_dbw2_book
oracle   18063     1  0 09:05 ?        00:00:00 ora_lgwr_book
oracle   18069     1  0 09:05 ?        00:00:00 ora_reco_book
oracle   18073     1  0 09:05 ?        00:00:02 ora_mmnl_book
oracle   18077     1  0 09:05 ?        00:00:00 ora_s000_book
oracle   18085     1  0 09:05 ?        00:00:00 ora_arc0_book
oracle   18087     1  0 09:05 ?        00:00:00 ora_arc1_book
oracle   18104     1  0 09:05 ?        00:00:00 ora_cjq0_book
oracle   20316     1  0 10:40 ?        00:00:00 ora_w000_book

3.关闭transparent_hugepag呢?
# echo never >| /sys/kernel/mm/transparent_hugepage/enabled
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

# ps -ef | grep ora[_] | awk '{print $2}' | xargs -IQ egrep -H "AnonHugePages"  /proc/Q/smaps | awk '{ if($2>0) print $0} '
--//没有任何输出,说明没有1个oracle后台进程使用transparent_hugepage。这验证我的判断。

# egrep -H "AnonHugePages|Rss"  /proc/*/smaps | paste - - | awk '{ if($5>0) print $0} '
/proc/4652/smaps:Rss:                6752 kB    /proc/4652/smaps:AnonHugePages:      6144 kB
/proc/8841/smaps:Rss:               17700 kB    /proc/8841/smaps:AnonHugePages:      4096 kB
--//有2个进程还使用,看看什么进程。*/

# ps -flp 4652,8841
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S gdm       4652  4593  0  80   0 - 55337 poll_s Feb10 ?        00:00:00 /usr/libexec/gdmgreeter
1 R root      8841     1  0  80   0 - 10215 -      Apr27 ?        00:00:33 tmux

4.总结:
--//以上测试可以看出使用AnonHugePages与transparent hugepage存在相关,也就是打开transparent hugepage,一些进程可能自动会使用它。
--//至于是否需要关闭,我个人觉得没必要。我在前面已经提到:
--//1.没有因为打开出现问题,尽管oracle有一些文档提到要关闭它,也许是早期版本它有一些问题.
--//2.理论讲使用它能减少PageTables的大小,节约内存使用.

5.收尾:
# echo always >| /sys/kernel/mm/transparent_hugepage/enabled
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2770237/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4017
  • 访问量
    7991556