系统卡死

集群卡住无响应通常出现在以下两种情景:

  • 节点启动或节点初始化过程中;
  • 运行时出现。这种情况可以先参考日常巡检章节,查看是否一些机器相关的指标异常。有一种可能是当前的集群负载比较高,导致系统响应变慢。在排除因为系统负载原因导致的响应慢的情况下,需要先采集节点进程的栈信息,反馈给 DolphinDB 的技术支持人员进行排查。
注: 为了便于 DolphinDB 技术支持更准确地分析栈的变化,建议至少采集两次栈信息,且两次采集之间的间隔时间为3-5分钟。

1. 采集栈信息:方法1

  1. 安装 pstack

  2. 在集群的各台机器上运行如下的 shell 脚本:

    #!/bin/bash 
    
    mkdir /root/output/ 
    
    dpid=`ps -ef |grep "mode datanode" |grep -v grep | awk '{print $2}'` 
    cpid=`ps -ef |grep "mode controller" |grep -v grep | awk '{print $2}'` 
    
    for i in $dpid 
    do 
        cd /ddb/software/server
        pstack $i > /root/output/pstack_dnode_${i}.log 
    done 
    
    for i in $cpid 
    do 
        cd /ddb/software/server 
        pstack $i > /root/output/pstack_ctrl_${i}.log 
    done

以上脚本运行后,会在/root/output的目录下生成栈信息。之后需要将这些文件发给 DolphinDB 技术支持进行进一步的分析。

2. 采集栈信息:方法2

如果环境没有 pstack,可以通过 gdb 的命令来获取栈信息,参考如下:

#!/bin/bash
mkdir /root/output/

dpid=`ps -ef |grep "mode datanode" |grep -v grep | awk '{print $2}'`
cpid=`ps -ef |grep "mode controller" |grep -v grep | awk '{print $2}'`
for i in $dpid
do
    cd /home/dolphindb/server
    gdb --eval-command "set logging file /root/output/pstack_dnode_$i.log" --eval-command "set logging on" --eval-command "thread apply all bt" --batch --pid $i;
done

for i in $cpid
do
    cd /home/dolphindb/server
    gdb --eval-command "set logging file /root/output/pstack_ctl_$i.log" --eval-command "set logging on" --eval-command "thread apply all bt" --batch --pid $i;
done