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