如何進(jìn)行l(wèi)inux內(nèi)存的Hugepages優(yōu)化-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)如何進(jìn)行l(wèi)inux內(nèi)存的Hugepages優(yōu)化,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

十載的清河網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整清河建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“清河網(wǎng)站設(shè)計”,“清河網(wǎng)站推廣”以來,每個客戶項目都認(rèn)真落實(shí)執(zhí)行。

Hugepages是從Linux kernal 2.6后被引入的,其目的是使用更大的memory page size以適應(yīng)越來越大的系統(tǒng)內(nèi)存。

理論知識:

(1. Page Table大小

而Hugepages的常見page size為2M,是4k size的500倍,所以可以大大減小page table的size。

這是一個沒有配置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)存。所以在訪問內(nèi)存時需要先訪問page tables得到虛擬內(nèi)存和物理內(nèi)存的映射關(guān)系,然后再訪問物理內(nèi)存。

(3.使用Hugepages的內(nèi)存頁是不會被交換出去的,永遠(yuǎn)常駐在內(nèi)存中,所以也減少了內(nèi)存也替換的額外開銷

2、數(shù)據(jù)庫服務(wù)器上使用Hugepages要注意的幾點(diǎn)

比如說Hugepages設(shè)置為90G,oracle SGA為91G,那么oracle在啟動的時候就不會使用到這90G的Hugepages。這90G就浪費(fèi)了。所以在設(shè)置Hugepages時要計算SGA的大小,后面會給出一個腳本來計算。

(3. PGA不會使用Hugepages的內(nèi)存。所以11g的AMM (Automatic Memory Management,memory_target參數(shù))是不被支持的。而ASMM(Automatic Shared Memory Management, SGA_target參數(shù))是被支持的,這兩個不要搞混淆了。

舉例說明:

HugePages_Total: 43000
HugePages_Free: 29493
HugePages_Rsvd: 23550
Hugepagesize: 2048 kB
HugePages_Total為所分配的頁面數(shù)目,和Hugepagesize相乘后得到所分配的內(nèi)存大小。43000*2/1024大約為84GB
HugePages_Free為從來沒有被使用過的Hugepages數(shù)目。即使oracle sga已經(jīng)分配了這部分內(nèi)存,但是如果沒有實(shí)際寫入,那么看到的還是Free的。這是很容易誤解的地方
HugePages_Rsvd為已經(jīng)被分配預(yù)留但是還沒有使用的page數(shù)目。在Oracle剛剛啟動時,大部分內(nèi)存應(yīng)該都是Reserved并且Free的,隨著oracle SGA的使用,Reserved和Free都會不斷的降低
HugePages_Free – HugePages_Rsvd 這部分是沒有被使用到的內(nèi)存,如果沒有其他的oracle instance,這部分內(nèi)存也許永遠(yuǎn)都不會被使用到,也就是被浪費(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會自動配置這個參數(shù)。

第二步:驗證memlock使用如下命令查看參數(shù)值:  這里,最好是重啟一下服務(wù)器再驗證,比較穩(wěn)妥

60397977

第三步:11g中禁用AMM    ----注意

另外:默認(rèn)情況下ASM instance也是使用AMM的,但因為ASM實(shí)例不需要大SGA,所以對ASM實(shí)例使用HugePages意義不大。

確保所有的數(shù)據(jù)庫實(shí)例都已經(jīng)啟動,包括ASM實(shí)例。使用hugepages_settings.sh腳本獲取thevm.nr_hugepages內(nèi)核參數(shù)的建議值。

...(略)

...

驗證配置:

      為了確保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

附計算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)化,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(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://muchs.cn/article20/dspdjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、建站公司Google、營銷型網(wǎng)站建設(shè)、小程序開發(fā)、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)