[20210428]AnonHugePages與transparent hugepage.txt
[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部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2770237/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20220909]AnonHugePages與transparent hugepage 3.txt
- Transparent Tribe行動
- [20210428]資料庫連線加密.txt資料庫加密
- [20210428]改進pr.sql指令碼.txtSQL指令碼
- CSS 搞事技巧:border+transparentCSS
- How to disable transparent hugepages (THP) on Red Hat Enterprise Linux 7Linux
- How to disable transparent Hugepage (THP) on Red Hat Enterprise Linux 8?Linux
- [20210803]對比transparent hugepage的記憶體消耗.txt記憶體
- aardio 背景透明的3種方式(透明窗體1 webview2,透明窗體2-win-region-bitmap,透明窗體3-winform-transparent-color)WebViewORM
- undefined與null與?. ??UndefinedNull
- Promise與async/await與GeneratorPromiseAI
- for of 與 for in
- 程式與執行緒、同步與非同步、阻塞與非阻塞、併發與並行執行緒非同步並行
- forms元件補充與ModelForm簡單使用與cookie與sessionORM元件CookieSession
- Python學習筆記 5.0 元組 與 字典 與 集合 與 公共操作 與 推導式Python筆記
- 進與穩,時代與技術,新基建與華為雲
- jQuery與JavaScript與ajax三者的區別與聯絡jQueryJavaScript
- 聊聊執行緒與程式 & 阻塞與非阻塞 & 同步與非同步執行緒非同步
- Iterator與Iterable(迭代器與可迭代)
- 漏型與源型、PNP與NPN
- GRPC與 ProtoBuf 的理解與總結RPC
- PySpark與GraphFrames的安裝與使用Spark
- Process與Socket,Select與Accept關係
- PHP 與 Swoole 淺析與學習PHP
- rpm與yum,at與crontab,sed命令使用
- css(二):高度與文件流,line-box與box,寬度,position與CSS
- A與B
- js == 與 ===JS
- Docker與containerd的關係與區別DockerAI
- JRE與JDK的區別與聯絡JDK
- Excutors 與 ThreadPoolExcutor 的關係與區別thread
- 《山海旅人》與它的詩與遠方
- Java:運用while()與do....while與for()JavaWhile
- cookie與session的自己思考與解釋CookieSession
- cookie與session的區別與聯絡CookieSession
- Tensor與tensor深入分析與異同
- 陣列與字串方法與相互轉換陣列字串
- python加密與解密,加簽與驗籤Python加密解密