問題現象
問題單:exp匯出全庫1主2備主節點執行,DMP檔案30G左右系統卡死,發生主備切換
現象:
-
exp sys/Cod-2022 file=bim20240402.dmp full=y 伺服器卡死,ssh連線不上伺服器。
-
等待一兩個小時後,可以重新連線上。
-
備用節點升主正常,檢視run.log,心跳傳送不到主節點。
-
重連後,yasdb不在,檢視run.log沒有問題。未生成core檔案,yasagent程序等正常。
問題風險及影響
不能exp資料,資料遷移失敗
問題影響的版本
客戶測試環境版本:23.1.4.101
問題發生原因
exp匯出資料時,大量資料從磁碟放到data buff,導致實際使用記憶體增長,超過系統限定後,觸發oom導致yasdb被殺。
問題分析和處理過程
分析:
-
因為磁碟是nfs,初步懷疑是否是nfs導致網路問題。但換其它磁碟後,也出現同樣問題。
-
因為資料是從22.2.7.2使用exp匯出,imp匯入23.1。現在exp匯出出問題,懷疑是否是相容性問題。本地同樣方式操作,未復現成功。pstack檢視堆疊空間,gdb除錯顯示正常,也沒有core檔案生成。
-
檢視伺服器message資訊,發現yasdb都是被killed。懷疑是yasdb使用太多記憶體資源導致的問題,最終確認是這個原因。
檢視伺服器記憶體資源
free -h
檢視yasd buff情況
測試
在10.34.70.91節點:
嘗試如下:
● 開啟swap空間為20G,DATA_BUFFER_SIZE由23528M 改到10240M
exp sys/Cod-2022 file=bim20240402.dmp full=y 匯出成功,沒有異常狀態
● SWAP空間關閉。DATA_BUFFER_SIZE由23528M 改到10240M
exp sys/Cod-2022 file=bim20240402.dmp full=y 匯出成功,沒有異常狀態
● 開啟swap空間為40G。DATA_BUFFER_SIZE為23528M
exp sys/Cod-2022 file=bim20240402.dmp full=y 匯出成功,沒有異常狀態
● swap不開,DATA_BUFFER_SIZE為23528M
exp sys/Cod-2022 file=bim20240402.dmp full=y 伺服器卡死,直到yasdb被killed,才能重新連線上去
在10.34.70.78節點:
嘗試如下:
● swap空間為30G,
exp sys/Cod-2022 file=bim20240402.dmp full=y 匯出成功,沒有異常狀態
解決方法和規避
規避方法
有兩種,可以單獨配置,也可以兩個同時做:
- 開啟swap空間
swapoff -a
dd if=/dev/zero of=/swap bs=1M count=30720
mkswap /swap
chmod 600 /swap
swapon /swap
sysctl -w vm.swappiness=60
永久開啟swap:
vi /etc/fstab新增如下:
/swap swap swap defaults 0 0
- 把DATA_BUFFER_SIZE調低,不要超過總記憶體的60%。
alter system set DATA_BUFFER_SIZE=xxx SCOPE=SPFILE;
- core檔案配置
echo "ulimit -c unlimited" >> /etc/profile
source /etc/profile
mkdir -p /data/corefile
chmod 777 /data/corefile/
echo "/data/corefile/core-%e-%p-%t" >> /proc/sys/kernel/core_pattern
echo "kernel.core_pattern=/data/corefile/core-%e-%p-%t" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
經驗總結
-
yasdb資料記憶體使用一般設定在系統的60%左右較好,data buff一般設定為yasdb記憶體的80%。
-
遇上yasdb不存在了,但是沒有生成core。很有可能就是被系統kill掉了,這時可以先去看/var/log/message資訊,核實改問題。