【问题标题】:urllib3 segfault (core dumped)urllib3 段错误(核心转储)
【发布时间】:2016-08-14 01:20:02
【问题描述】:
我遇到了一个 python 程序的段错误(“非法操作(核心转储)”),该程序我每周都运行了很长时间而没有错误。我也在 Nitrous 上运行 Ubuntu。我记得以前用 C 编码时处理过这些 yonks,而最近我不必处理它们。
导入库 urllib3 似乎是导致问题的原因。有人知道解决办法吗?
另外,有人可以建议或链接到未来诊断这些问题的最佳工作流程吗?
谢谢!
【问题讨论】:
标签:
python
linux
segmentation-fault
urllib3
【解决方案1】:
“非法操作”
这通常意味着您正在为功能更强大的处理器(例如Haswell)在功能较弱的处理器(例如Ivy Bridge)上运行编译的代码。
导入库 urllib3 似乎是导致问题的原因。
在我的 Ubuntu 机器上,import urllib3 加载 libssl.so.1.0.0、libcrypto.so.1.0.0 和 _ssl.x86_64-linux-gnu.so。这些加密库很可能使用您的处理器可能不支持的AVX、AVX2 等指令进行编译。
诊断这些问题的最佳工作流程
您的第一步应该是找出导致SIGILL 的指令。为此,请运行:
gdb python
(gdb) run
>>> import urllib3 # do whatever is necessary to reproduce SIGILL
(gdb) x/i $pc
(gdb) info sym $pc
上面的最后两个命令应该为您提供导致SIGILL 的指令,以及使用该指令的库。一旦您知道该指令是什么,您就可以验证您的处理器不支持它,并联系“有罪”库的分销商以获得不同的编译(一个不使用您的 CPU 不支持的指令的编译)。