问题现象
问题单: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信息,核实改问题。