【问题标题】:Python server "Aborted (Core dumped)"Python 服务器“中止(核心转储)”
【发布时间】:2016-10-06 01:30:59
【问题描述】:

我使用 web.py 创建 Python Web 服务器。调用此服务器来解决线性规划问题,它使用库 CBC 来解决此问题。

每隔一段时间,服务器就会崩溃并显示如下所示的日志:

78.243.184.3:56271 - - [03/Jun/2016 04:35:54] "HTTP/1.1 GET /optimization" - 200 OK
Aborted (core dumped)

我相信“Aborted (core dumped)”是一个 C 错误,所以它来自 web.py 或 CBC。

有什么方法可以追溯错误的根源吗?

【问题讨论】:

  • 也许你可以找到核心文件。
  • 你知道怎么做吗?
  • 取决于系统。可能是find / -name "core" -ls 工作。
  • 这个命令给了我一长串核心路径。
  • 检查 dmesg,您可能会发现更多信息。要调试 python 本身,您需要使用调试符号编译或安装 python

标签: python c web.py linear-programming coredump


【解决方案1】:

核心转储的最常见原因是访问您无法访问的内存地址(不属于您的程序的内存)。操作系统使用称为 SegFault 或 BusError 的中断来中断程序,具体取决于程序如何尝试访问无效的内存地址。然后程序将被内核强制关闭。如果内核已配置为创建核心转储(内存和程序堆栈的转储),则会将其保存到磁盘。如另一个答案中所述,您可以将核心转储加载到 GDB 或其他调试器中,并显示程序在崩溃时正在做什么。这可能会给您手头的问题,也可能不会。通常,即使是经验丰富的程序员也很难使用这些工具,因此请注意。如果你想尝试使用 GDB,试试这个:

$ gdb /path/to/crashing/program/binary /path/to/core

(gdb) bt

“bt”将显示“回溯”,也称为 StackTraces,对于程序员追踪错误很有用。

如果您能够重现该错误,那么您可能会幸运地向相关程序的创建者提交详细的错误报告。即使是我作为一名高级软件开发人员,也会时不时地走这条路。 :-)

【讨论】:

    【解决方案2】:

    核心转储是由 Web 服务器中的本机代码中的错误引起的。这些天 Python 非常可靠,因此根据我的经验,此类故障几乎总是由 C 扩展中的错误引起的。

    因此你有 3 个问题。

    1. 您需要找到核心转储文件。这通常位于转储进程的当前工作目录中。不过有configation options that can change this

    2. 您需要调试失败的调用堆栈。这在 StackOverflow 中有介绍 - 请参阅 How to analyze a program's core dump file with gdb?

    3. 您可能需要将 Python 解释器堆栈与您正在运行的 Python 代码相关联。为此,您需要为 gdb 安装 Python 调试符号和 Python 扩展。 Python wiki 对如何做到这一点有很好的建议here

    【讨论】:

    • 感谢您的回答,我明天会检查 gdb。我有几个问题: 1. 你怎么知道问题来自网络服务器而不是 CBC? 2.您是否承认问题来自库 web.py 而不是我的代码? 3. server.py目录下没有找到core dump文件。在哪里可以找到 web.py 的配置选项? 4、如果在web.py的代码中,如何调试? 5. 您认为最好的选择是将 web.py 更改为另一个库吗?感谢您的帮助!
    • 我真的不能告诉你答案。您有一个核心转储并在其上运行 gdb 会告诉您错误在哪里。这就是存在核心文件的原因——用于事后分析。为了从任何人那里获得更多帮助,您需要使用我描述的技术提取调用堆栈并用它更新您的问题。
    • 但该错误每隔一段时间就会出现一次(每 2 或 3 周一次),我无法重现它......
    • 我真的很抱歉,但我无能为力了。核心文件的存在正是为了诊断这些类型的故障。找到核心文件,进行堆栈跟踪,然后分享您的发现(如果还没有为您确定错误)。所有这些以前的转储都将生成文件。您可以使用其中任何一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2015-08-11
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多