ITPub博客

首页 > 数据库 > Oracle > [20210803]对比transparent hugepage的内存消耗.txt

[20210803]对比transparent hugepage的内存消耗.txt

原创 Oracle 作者:lfree 时间:2021-08-03 10:33:57 0 删除 编辑

[20210803]对比transparent hugepage的内存消耗.txt

--//打开transparent hugepage时:
--//时间是 20210427
# free -m
             total       used       free     shared    buffers     cached
Mem:         64302      61683       2618          0        434      36519
-/+ buffers/cache:      24729      39573
Swap:        16383          0      16383

# grep -i page /proc/meminfo
AnonPages:      12180556 kB
PageTables:     11196784 kB
AnonHugePages:   4888576 kB
HugePages_Total:     220
HugePages_Free:      184
HugePages_Rsvd:      157
HugePages_Surp:        0
Hugepagesize:       2048 kB
--//顺便说一下该数据库没有使用hugepages,不然PageTables:11196784 kB不会这么大,占用11g。

# grep -e AnonHugePages /proc/*/smaps |awk '{ if($2>0) print $0} ' | awk -F '/' '{print $3}'| paste -sd, | xargs ps -fp | grep oracleywdb1|wc
    241    2169   17189
*/
--//有241个oracle用户进程使用AnonHugePages。

--//关闭transparent_hugepage看看呢?
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

# echo never >| /sys/kernel/mm/transparent_hugepage/enabled

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

--//等待明天观察看看,结果第2天观察发现变化不是很大:
# grep -e AnonHugePages /proc/*/smaps |awk '{ if($2>0) print $0} ' | awk -F '/' '{print $3}'| paste -sd, | xargs ps -fp | grep oracleywdb1|wc
     70     630    5009
*/
--//昏还有70个链接,难道用户从不退出应用程序吗?依旧有这么多oracle用户进程使用AnonHugePages。

# free -m
             total       used       free     shared    buffers     cached
Mem:         64302      63015       1287          0        437      36655
-/+ buffers/cache:      25922      38380
Swap:        16383          0      16383

# grep -i page /proc/meminfo
AnonPages:      12245992 kB
PageTables:     12311564 kB
AnonHugePages:   4526080 kB
HugePages_Total:     220
HugePages_Free:      184
HugePages_Rsvd:      157
HugePages_Surp:        0
Hugepagesize:       2048 kB

--//可以发现AnonHugePages再减少,但是PageTables再增加,free  -m 可以看出used使用增加,感觉采用transparent hugepage更好。
--//等待更长的时间观察,结果等了3个月,主要原因时等保检查改了口令,我没有申请无法登陆服务器。

# grep -e AnonHugePages /proc/*/smaps |awk '{ if($2>0) print $0} ' | awk -F '/' '{print $3}'| paste -sd, | xargs ps -fp | grep oracleywdb1|wc
      7      63     536
--//还有7个连接没有退出.

# grep -e AnonHugePages /proc/*/smaps |awk '{ if($2>0) print $0} ' | awk -F '/' '{print $3}'| paste -sd, | xargs ps -fp| grep ora[_] | grep ywdb1|wc
     59     472    3721
--//后台进程没有退出,一直在使用AnonHugePages。

# free -m
             total       used       free     shared    buffers     cached
Mem:         64302      63261       1041          0        457      37732
-/+ buffers/cache:      25071      39231
Swap:        16383          0      16383

# grep -i page /proc/meminfo
AnonPages:      12085140 kB
PageTables:     11643576 kB
AnonHugePages:   4302848 kB
HugePages_Total:     220
HugePages_Free:      184
HugePages_Rsvd:      157
HugePages_Surp:        0
Hugepagesize:       2048 kB

# grep -e AnonHugePages /proc/*/smaps |awk '{ if($2>0) print $0} ' | awk '{print $2}' | paste -sd+ | bc
4302848
*/

--//看看生产系统exadata的情况更加明显,数据库使用hugepage,可以发现AnonPages很大大约38G,PageTables很小仅仅不到3G。
--//我前面已经提到exadata的服务器内核缺省没有开启transparent hugepage,可以发现根本没有AnonHugePages项。
#  grep -i hugepage config-2.6.39-400.126.1.el5uek
# CONFIG_TRANSPARENT_HUGEPAGE is not set

$  grep -i page /proc/meminfo
AnonPages:      40119940 kB
~~~~~~~~~~~~~~~~~~~~~~~~~~
PageTables:      2952044 kB
HugePages_Total:   70540
HugePages_Free:     3401
HugePages_Rsvd:     3391
HugePages_Surp:        0
Hugepagesize:       2048 kB

--//没有AnonHugePages项
--//40119940/1024/1024 = 38.26G ,AnonPages占用38G。

2.总结:
--//1.没有因为打开transparent hugepage出现问题,尽管oracle有一些文档提到要关闭它,也许是早期版本它有一些问题.
--//2.理论讲使用transparent hugepage能减少PageTables的大小,节约内存使用.
--//3.我对transparent hugepage的理解,连续使用内存大于2048KB的进程自动使用它,小于2048KB,使用4K的pagetables。
--//4.感觉exadata的服务器内核缺省应该选择编译支持开启transparent hugepage的选项,我想现在许多数据库只要你安装
--//不是oracle kenrel版本,应该都是开启transparent hugepage的,根本不存在任何问题。有问题在一些论坛早发现了。

3.收尾,开启transparent_hugepage:

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

# 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-2784887/ ,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7970810