【YashanDB知识库】EXP导致主机卡死问题

来源:这里教程网 时间:2026-03-03 20:22:57 作者:

问题现象

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

  • 相关推荐