在Trafodion中我们通常会使用”ulimit -c”来控制系统在有异常的时候是否生成core文件,core文件对问题分析十分重要,尤其是底层代码的Debug。
假如我们现在发现系统中生成了一些core文件,应该怎么去分析呢?
Trafodion中的生成的core文件主要在两个目录, MYSQROOT和 MY_SQROOT/sql/scripts下面,即 cdw和cds下面,假如有一个生成的core文件,使用”file core.xxx”先查明是来自哪个进程的core,如mxosrvr、mxsscp还是其他,如下例子的core就是一个mxosrvr的core文件。
[trafodion@datanode06 esgynDB_adv_server-2.2.2-RH7-x86_64]$ file core.57029
core.57029: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from 'mxosrvr -ZKHOST datanode07.hadoop.gxdwdc:2181,datanode06.hadoop.gxdwdc:2181,dat'
然后我们可以使用”gdb mxosrvr core.xxx”获取详细的信息,主要命令如下,
gdb mxosrvr core.xxx
set logging file core.xxx.log
set logging on
thread apply all bt
set logging off
上述命令执行完成后会在当前目录下生成一个core.xxx.log的文件,保存了”thread apply all bt”的详细输出内容,可供后续分析。