[20221125]設定hugepages遇到的問題.txt

lfree發表於2022-11-28

[20221125]設定hugepages遇到的問題.txt

--//前幾天我在dg上修改oracle一個引數,要重啟才生效,我看了一下資料庫沒有采用hugepages,想著順手設定hugepages,沒想到遇到問題
--//,我開始以為業務不會受影響.沒想到開發或者同事有一些查詢移到dg上利用它做只讀查詢完成,導致前臺一些查詢業務受到短暫的影
--//響.做一個事後記錄分析總結,避免以後重犯類似錯誤.

1.環境:
SYS@192.168.100.237:1521/orcldg> @pr
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 19.0.0.0.0
BANNER                        : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
BANNER_LEGACY                 : Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

2.遇到問題1:
--//配置hugepages要修改/etc/security/limits.conf,加入如下內容.
# grep memlock /etc/security/limits.conf
#        - memlock - max locked-in-memory address space (KB)
oracle   soft  memlock  unlimited
oracle   hard  memlock  unlimited

--//而我操作介面使用tmux登入,重啟資料庫後,root執行sysctl -p後,直接startup,導致資料庫無法啟動.
--//不過我馬上明白過來,要重新退出在登入oracle使用者.執行就ok了.

--//可以做一個簡單測試:
--//註解memlock內容:
# grep memlock /etc/security/limits.conf
#        - memlock - max locked-in-memory address space (KB)
#oracle   soft  memlock  unlimited
#oracle   hard  memlock  unlimited

# su - oracle
$ grep "Max locked memory" /proc/self/limits
Max locked memory         65536                65536                bytes
--//soft , hard memlock = 65536  位元組,太小了.

--//取消註解memlock內容:
# grep memlock /etc/security/limits.conf
#        - memlock - max locked-in-memory address space (KB)
oracle   soft  memlock  unlimited
oracle   hard  memlock  unlimited

# su - oracle
$ grep "Max locked memory" /proc/self/limits
Max locked memory         unlimited            unlimited            bytes
--//soft , hard memlock = unlimited.
--//總之遇到這類問題要保持清醒的頭腦,意識到退出會話再登入再執行就可以了.
--//另外參考連結http://blog.itpub.net/267265/viewspace-2645466/=>[20190523]修改引數後一些細節注意2.txt,
--//當時的測試也給了我現在很大幫助.

3.遇到問題2:
--//sga_max_size,sga_target設定8G,我想設定vm.nr_hugepages = 4100,於是修改如下::
# grep vm.nr /etc/sysctl.conf
vm.nr_hugepages = 4100
vm.nr_overcommit_hugepages = 1300

# sysctl -p | grep vm.nr
vm.nr_hugepages = 4100
vm.nr_overcommit_hugepages = 1300
--//注意一定要關閉資料庫再執行sysctl -p,不然更加無法獲得規定數量的vm.nr_hugepages.
--//感覺上這樣已經設定,而實際上linux無法找到一個這個大chunk的memory.導致實際的設定情況是:
# sysctl vm.nr_hugepages
vm.nr_hugepages = 3758

--//這樣的結果導致僅僅部分oracle共享記憶體使用hugepages.我開始不知道卡在這裡,檢視:
$ grep -i HugePages_Total /proc/meminfo
HugePages_Total:    3758

# free -m
              total        used        free      shared  buff/cache   available
Mem:          15751        8622         167         321        6962        6424
Swap:         20479        1087       19392

--//主要原因是無法獲取滿足需要的大chunk記憶體,設定vm.nr_hugepages的需求.
--//所以以後設定要注意這些細節問題,應該再安裝配置dg時做好這些前期工作.
--//當發現記憶體不足是,我還修改啟動模式為multi-user.target,順便做一個記錄,但是還是無法設定vm.nr_hugepages = 4100
# systemctl set-default multi-user.target
# systemctl isolate multi-user.target
# who -r
         run-level 3  2022-11-23 11:31                   last=5

--//最後,我還是修改sga_max_size,sga_target=7500M.保證資料庫啟動,先不影響業務的執行.
--//實際上這臺伺服器還是表現記憶體不足的情況

4.今天上班嘗試取消一些不必要的服務看看:

# systemctl disable ModemManager.service
Removed symlink /etc/systemd/system/multi-user.target.wants/ModemManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.ModemManager1.service.

# systemctl stop ModemManager.service

# systemctl disable postfix.service
Removed symlink /etc/systemd/system/multi-user.target.wants/postfix.service.
# systemctl stop postfix.service

# systemctl disable cups.service
# systemctl stop cups.service

# sysctl -p
...
# sysctl vm.nr_hugepages
vm.nr_hugepages = 3758

--//還是不行.不知道是否應該先關閉資料庫再執行sysctl -p,生產系統不幹亂動,暫時放棄!!

5.總結:
--//重啟dg前,最好先問一下同事是否可行,因為不知道一些具體的業務情況.
--//事前配置好資料庫引數以及相關設定,儘量避免這種中間改動維護工作,導致時間倉促,現場導致30分鐘的業務停頓.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2925374/,如需轉載,請註明出處,否則將追究法律責任。

相關文章