KDB运行触发segmentation fault无响应,Dwarf Error及低内存是否为诱因?
KDB运行时崩溃提示:
Sorry, this application or an associated library has encountered a fatal error and will exit. If known, please email the steps to reproduce this error to tech@kx.com with a copy of the kdb+ startup banner and the info printed below. Thank you. SIGSEGV: Fault address
Core文件调试时报错:Dwarf Error: wrong version in compilation unit header (is 0, should be 2,3 or 4)
故障可能触发原因
- KDB加载的第三方扩展(如自定义C扩展、外部依赖动态库)存在内存越界、野指针访问、空指针解引用等代码缺陷,触发系统发送SIGSEGV信号终止进程
- 当前使用的KDB版本存在未修复的官方缺陷,在特定查询、数据写入、内存操作场景下触发非法内存访问,可收集复现步骤提交给kx技术团队排查
- 进程出现释放后重用(UAF)、栈溢出等内存操作问题,非法访问了无权限的内存地址
- 操作系统内存配置异常,如共享内存超限、内存页权限配置错误,导致进程访问内存触发权限校验失败
Dwarf Error是否会引发本次segmentation fault
该Dwarf Error不会引发本次段错误。该报错是gdb等调试工具加载core文件时,读取core内的DWARF调试信息失败的提示,属于调试环节的报错,和KDB运行时崩溃没有关系。
出现该报错的常见原因包括:生成core文件的环境和当前调试环境的gcc版本不兼容、core文件生成过程中出现损坏、官方发布的KDB二进制包本身未携带符合版本要求的DWARF调试信息。
机器内存不足是否会触发segmentation fault
单纯的内存不足不会直接触发SIGSEGV。内存不足时操作系统通常会触发OOM Killer机制,主动杀掉内存占用最高的进程,进程退出信号为SIGKILL,而非SIGSEGV。
但内存不足可能间接引发段错误:如果内存分配请求失败返回NULL指针,而程序没有做判空处理直接访问该NULL指针对应的地址,就会触发非法内存访问报错。
内容的提问来源于stack exchange,提问作者Shankar

