【YashanDB知識庫】EXP導致主機卡死問題

YashanDB發表於2024-07-23

問題現象

問題單: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資訊,核實改問題。

相關文章