问题定位

设置bash命令行提示符的样式

1
export PS1="\[\e[1;32m\]\u\[\e[1;31m\]@\[\e[1;33m\]\h\[\e[1;35m\]:\[\e[0;36m\]\w\[\e[1;35m\]\\$ \[\e[0m"

解压已压缩的日志

1
for tar in INFO*bz2 ; do tar xvf $tar; done

查看堆栈对应的代码行

1
addr2line -e bin/xcloudd ${堆栈地址}

示例:

1
addr2line -e bin/xcloudd 0x37f75d1

SQL卡住定位

  1. 获取sql的Query Id
  2. 替换以下命令中Query Id(仅最后一个冒号前的内容),执行命令,结果为没有返回的子计划id
1
grep -a "352c18e1:644e7347:1bf" log/INFO_* | awk '/InitFragment/ || /coord.*FragmentReport/ {print $6}' | sed -r 's/.*@//g' | sort | uniq -u
  1. 过滤出子计划id的日志,找到Open处的线程号tid
1
grep -a "352c18e1:644e7347:1bf:1" log/INFO_* | grep "Open"
  1. 查看调用堆栈,多执行几次,看看堆栈是否有变动
1
pstack ${tid}

查找日志中的堆栈

  1. 搜索报错信息关键字
  2. 搜索关键字Traced call stack for,上下查找
  3. 若无堆栈,找到报错信息所在线程,查看该线程的日志,查找报错(注意有的日志不带error等错关键字需要自行甄别)

打印所有线程堆栈到thread_info.txt文件

1
gdb -q --batch --ex "set height 0" --ex "set logging file thread_info.txt" --ex "set logging on" --ex "thread apply all  bt" --ex "set logging off" bin/xcloudd core.xxx

gdb调试core文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 使用stl_view.gdb脚本打印参数,pvector plist 等
source [stl_view.gdb路径]

# 关闭命令行分页功能
set pagination off

# 打印所有线程堆栈
thread apply all bt

# 显示所有线程
info threads

# 切换到该线程
thread tid

# 打印(char*)i的字符内容
x /10c &i

动态参数

查看总超时时间

1
grep -a "dynamic parameter total timeout is" log/xcloudd.INFO

查看节点同步回报是否正常

1
grep -i "SetFeedBackInfo" log/xclodd.INFO

查看压缩方式

1
grep -a "CompressionCodec" log/xcloudd.INFO

SQLDeveloper连接失败

报错Login failed, invalid username or password.

  1. 查看kv状态
  2. kv若正常,检查ntp服务
1
ntptime

日志报错HDFSMetaQueryProxy

检查kerberos_user_principalkerberos_keytab_file是否配置正确

检查是否有其他地方也会获取该锁,即争抢锁

找堆栈

  1. 根据报错搜索日志
  2. 找到该日志中全大写的报错定义名
  3. 根据报错定义名搜索报错堆栈(可能有多个)