[20210803]對比transparent hugepage的記憶體消耗.txt

lfree發表於2021-08-03

[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部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2784887/,如需轉載,請註明出處,否則將追究法律責任。

相關文章