本篇文章給大家分享的是有關(guān)如何進(jìn)行l(wèi)inux內(nèi)存的Hugepages優(yōu)化,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
Hugepages是從Linux kernal 2.6后被引入的,其目的是使用更大的memory page size以適應(yīng)越來(lái)越大的系統(tǒng)內(nèi)存。
理論知識(shí):
(1. Page Table大小
而Hugepages的常見(jiàn)page size為2M,是4k size的500倍,所以可以大大減小page table的size。
這是一個(gè)沒(méi)有配置Hugepage的系統(tǒng),系統(tǒng)內(nèi)存128G,pagetable大小大約為4G。
cat /proc/meminfo MemTotal: 132086880 kB PageTables: 4059612 kB 這是配置了Hugepage的系統(tǒng),系統(tǒng)內(nèi)存96G, PageTable大小僅為78M MemTotal: 98999880 kB PageTables: 79916 kB
進(jìn)程的虛擬內(nèi)存地址段先連接到page tables然后再連接到物理內(nèi)存。所以在訪問(wèn)內(nèi)存時(shí)需要先訪問(wèn)page tables得到虛擬內(nèi)存和物理內(nèi)存的映射關(guān)系,然后再訪問(wèn)物理內(nèi)存。
(3.使用Hugepages的內(nèi)存頁(yè)是不會(huì)被交換出去的,永遠(yuǎn)常駐在內(nèi)存中,所以也減少了內(nèi)存也替換的額外開(kāi)銷(xiāo)
2、數(shù)據(jù)庫(kù)服務(wù)器上使用Hugepages要注意的幾點(diǎn)
比如說(shuō)Hugepages設(shè)置為90G,oracle SGA為91G,那么oracle在啟動(dòng)的時(shí)候就不會(huì)使用到這90G的Hugepages。這90G就浪費(fèi)了。所以在設(shè)置Hugepages時(shí)要計(jì)算SGA的大小,后面會(huì)給出一個(gè)腳本來(lái)計(jì)算。
(3. PGA不會(huì)使用Hugepages的內(nèi)存。所以11g的AMM (Automatic Memory Management,memory_target參數(shù))是不被支持的。而ASMM(Automatic Shared Memory Management, SGA_target參數(shù))是被支持的,這兩個(gè)不要搞混淆了。
舉例說(shuō)明:
HugePages_Total: 43000 HugePages_Free: 29493 HugePages_Rsvd: 23550 Hugepagesize: 2048 kB HugePages_Total為所分配的頁(yè)面數(shù)目,和Hugepagesize相乘后得到所分配的內(nèi)存大小。43000*2/1024大約為84GB HugePages_Free為從來(lái)沒(méi)有被使用過(guò)的Hugepages數(shù)目。即使oracle sga已經(jīng)分配了這部分內(nèi)存,但是如果沒(méi)有實(shí)際寫(xiě)入,那么看到的還是Free的。這是很容易誤解的地方 HugePages_Rsvd為已經(jīng)被分配預(yù)留但是還沒(méi)有使用的page數(shù)目。在Oracle剛剛啟動(dòng)時(shí),大部分內(nèi)存應(yīng)該都是Reserved并且Free的,隨著oracle SGA的使用,Reserved和Free都會(huì)不斷的降低 HugePages_Free – HugePages_Rsvd 這部分是沒(méi)有被使用到的內(nèi)存,如果沒(méi)有其他的oracle instance,這部分內(nèi)存也許永遠(yuǎn)都不會(huì)被使用到,也就是被浪費(fèi)了。在該系統(tǒng)上有11.5GB的內(nèi)存被浪費(fèi)了。
3、設(shè)置HugePages步驟:
在/etc/security/limits.conf文件中添加memlock的限制,注意該值略微小于實(shí)際物理內(nèi)存的大小。比如物理內(nèi)存是64GB,可以設(shè)置為如下:
* hard memlock 60397977
如果使用了Oracle Linux的oracle?-validated包,或者Exadata DB compute會(huì)自動(dòng)配置這個(gè)參數(shù)。
第二步:驗(yàn)證memlock使用如下命令查看參數(shù)值: 這里,最好是重啟一下服務(wù)器再驗(yàn)證,比較穩(wěn)妥
60397977
第三步:11g中禁用AMM ----注意
另外:默認(rèn)情況下ASM instance也是使用AMM的,但因?yàn)锳SM實(shí)例不需要大SGA,所以對(duì)ASM實(shí)例使用HugePages意義不大。
確保所有的數(shù)據(jù)庫(kù)實(shí)例都已經(jīng)啟動(dòng),包括ASM實(shí)例。使用hugepages_settings.sh腳本獲取thevm.nr_hugepages內(nèi)核參數(shù)的建議值。
...(略)
...
驗(yàn)證配置:
為了確保HugePages配置的有效性,HugePages_Free值應(yīng)該小于HugePages_Total的值,并且應(yīng)該等于HugePages_Rsvd的值。
實(shí)例:機(jī)器配置:128G物理內(nèi)存+56G的SGA
root># grep HugePages /proc/meminfo HugePages_Total: 28674 HugePages_Free: 707 HugePages_Rsvd: 706
附計(jì)算hugepages腳本:
#!/bin/bash # # hugepages_settings.sh # # Linux bash script to compute values for the # recommended HugePages/HugeTLB configuration # # Note: This script does calculation for all shared memory # segments available when the script is run, no matter it # is an Oracle RDBMS shared memory segment or not. # # This script is provided by Doc ID 401749.1 from My Oracle Support # /tupian/20230522/ # Welcome text echo " This script is provided by Doc ID 401749.1 from My Oracle Support (/tupian/20230522/) where it is intended to compute values for the recommended HugePages/HugeTLB configuration for the current shared memory segments. Before proceeding with the execution please make sure that: * Oracle Database instance(s) are up and running * Oracle Database 11g Automatic Memory Management (AMM) is not setup (See Doc ID 749851.1) * The shared memory segments can be listed by command: # ipcs -m Press Enter to proceed..." read # Check for the kernel version KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'` # Find out the HugePage size HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'` # Initialize the counter NUM_PG=0 # Cumulative number of pages required to handle the running shared memory segments for SEG_BYTES in `ipcs -m | awk '{print $5}' | grep "[0-9][0-9]*"` do MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q` if [ $MIN_PG -gt 0 ]; then NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q` fi done RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q` # An SGA less than 100MB does not make sense # Bail out if that is the case if [ $RES_BYTES -lt 100000000 ]; then echo "***********" echo "** ERROR **" echo "***********" echo "Sorry! There are not enough total of shared memory segments allocated for HugePages configuration. HugePages can only be used for shared memory segments that you can list by command: # ipcs -m of a size that can match an Oracle Database SGA. Please make sure that: * Oracle Database instance is up and running * Oracle Database 11g Automatic Memory Management (AMM) is not configured" exit 1 fi # Finish with results case $KERN in '2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`; echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;; '2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;; *) echo "Unrecognized kernel version $KERN. Exiting." ;; esac
以上就是如何進(jìn)行l(wèi)inux內(nèi)存的Hugepages優(yōu)化,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。
當(dāng)前題目:如何進(jìn)行l(wèi)inux內(nèi)存的Hugepages優(yōu)化-創(chuàng)新互聯(lián)
標(biāo)題URL:http://chinadenli.net/article20/dspdjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、建站公司、Google、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容