内核 - libc-2 中的 postgres 段错误 15。19.so

kernel - postgres segfault error 15 in libc-2.19.so

昨天我们在 Debian 8 (Linux xxxxxx 3.16.0-7-amd64 #1 SMP Debian 3.16.59-1 (2018-10- 03) x86_64 GNU/Linux) - 分段错误。数据库关闭所有连接并重新初始化自身,在恢复模式下停留约 1 分钟。

PostgreSQL 日志:

2018-10-xx xx:xx:xx UTC [580-2] LOG: server process (PID 16461) was terminated by signal 11: Segmentation fault

kern.log:

Oct xx xx:xx:xx xxxxxxxx kernel: [117977.301353] postgres[16461]: segfault at 7efd3237db90 ip 00007efd3237db90 sp 00007ffd26826678 error 15 in libc-2.19.so[7efd322a2000+1a1000]

根据 libc 文档 (https://support.novell.com/docs/Tids/Solutions/10100304.html),错误代码 15 表示: NX_EDEADLK 15 resource deadlock would occur - 这并没有告诉我太多。

你能告诉我我们将来是否可以做些什么来避免这个问题吗?因为这个服务器当然是生产服务器。 当前所有软件包都是最新的。不幸的是,升级 PG 不是一种选择。服务器在 Google Compute Engine 上运行。

error code 15 means: NX_EDEADLK 15

不,不是那个意思。 This answer 在这里解释如何解释 15。

设置位 0、1、2、3 => 保护故障、写访问、用户模式、保留位的使用。您的 postgress 进程很可能试图写入某个野指针。

if we can do something to avoid this problem in the future?

唯一你能做的就是找到错误并修复它,或者升级到 postgress 已经修复错误的版本(并希望没有引入新的)。

要了解错误可能出在哪里,您应该检查是否生成了 core 转储(如果没有,请启用它们)。如果您有 core,请使用 gdb /path/to/postgress /path/to/core,然后使用 where GDB 命令。这将为您提供崩溃堆栈跟踪,这可能会让您找到类似的错误报告。