由于 RED hat Linux 上的分段错误,我们正面临 C++ 应用程序崩溃问题。我们在 C++ 中使用嵌入式 python。
请在下面找到我的限制
- 我不能访问应用程序崩溃的生产机器吗?当应用程序崩溃时,客户端向我们发送核心转储文件。
- 问题在我们的测试机器上无法重现,它与生产机器具有完全相同的配置。
- 有时应用程序在 1 小时、4 小时 ....1 天或 1 周后崩溃。我们还没有得到应用程序崩溃的时间框架或任何特定模式。
- 应用程序很复杂,并且在应用程序中的很多地方都使用了嵌入式 python 代码。我们进行了广泛的代码审查,但无法通过代码审查找到解决方法。
- 根据核心转储中的堆栈跟踪,它在乘法操作周围崩溃,在代码中审查了此类操作的代码,我们没有得到任何执行此类操作的代码。可能是此类操作是通过从我们无法控制或无法查看的嵌入式 python 执行的 python 脚本调用的。
- 我们不能在 Valgrind 等生产环境中使用任何分析工具。
- 我们在本地机器上使用 gdb 来分析核心转储。我们无法在生产机器上运行 gdb。
请在下面找到我们所做的努力。
- 我们已经分析了日志并不断地向我们的测试环境中的应用程序发出请求以重现问题。
- 我们没有在日志中得到崩溃点。每次我们得到不同的日志。我认为这是由于;内存在其他地方被破坏,应用程序在一段时间后崩溃。
- 我们已经在我们的应用程序的任何时候检查了负载,并且它从未超过我们的应用程序限制。
- 我们的应用程序的内存利用率也很正常。
- 我们在测试机器中借助 Valgrind 分析了我们的应用程序并删除了 valgrind 错误,但应用程序仍然崩溃。
我感谢任何帮助指导我们进一步解决问题。
以下是版本详情
红帽 linux 服务器 5.6 (Tikanga) Python 2.6.2 GCC 4.1
以下是我从他们共享的核心转储文件中获得的堆栈跟踪(在我的机器上)。仅供参考,我们无权访问生产机器来在核心转储文件上运行 gdb。
0 0x00000033c6678630 in ?? ()
1 0x00002b59d0e9501e in PyString_FromFormatV (format=0x2b59d0f2ab00 "can't multiply sequence by non-int of type '%.200s'", vargs=0x46421f20) at Objects/stringobject.c:291
2 0x00002b59d0ef1620 in PyErr_Format (exception=0x2b59d1170bc0, format=<value optimized out>) at Python/errors.c:548
3 0x00002b59d0e4bf1c in PyNumber_Multiply (v=0x2aaaac080600, w=0x2b59d116a550) at Objects/abstract.c:1192
4 0x00002b59d0ede326 in PyEval_EvalFrameEx (f=0x732b670, throwflag=<value optimized out>) at Python/ceval.c:1119
5 0x00002b59d0ee2493 in call_function (f=0x7269330, throwflag=<value optimized out>) at Python/ceval.c:3794
6 PyEval_EvalFrameEx (f=0x7269330, throwflag=<value optimized out>) at Python/ceval.c:2389
7 0x00002b59d0ee2493 in call_function (f=0x70983f0, throwflag=<value optimized out>) at Python/ceval.c:3794
8 PyEval_EvalFrameEx (f=0x70983f0, throwflag=<value optimized out>) at Python/ceval.c:2389
9 0x00002b59d0ee2493 in call_function (f=0x6f1b500, throwflag=<value optimized out>) at Python/ceval.c:3794
10 PyEval_EvalFrameEx (f=0x6f1b500, throwflag=<value optimized out>) at Python/ceval.c:2389
11 0x00002b59d0ee2493 in call_function (f=0x2aaab09d52e0, throwflag=<value optimized out>) at Python/ceval.c:3794
12 PyEval_EvalFrameEx (f=0x2aaab09d52e0, throwflag=<value optimized out>) at Python/ceval.c:2389
13 0x00002b59d0ee2d9f in ?? () at Python/ceval.c:2968 from /usr/local/lib/libpython2.6.so.1.0
14 0x0000000000000007 in ?? ()
15 0x00002b59d0e83042 in lookdict_string (mp=<value optimized out>, key=0x46424dc0, hash=40722104) at Objects/dictobject.c:412
16 0x00002aaab09d5458 in ?? ()
17 0x00002aaab09d5458 in ?? ()
18 0x00002aaab02a91f0 in ?? ()
19 0x00002aaab0b2c3a0 in ?? ()
20 0x0000000000000004 in ?? ()
21 0x00000000026d5eb8 in ?? ()
22 0x00002aaab0b2c3a0 in ?? ()
23 0x00002aaab071e080 in ?? ()
24 0x0000000046422bf0 in ?? ()
25 0x0000000046424dc0 in ?? ()
26 0x00000000026d5eb8 in ?? ()
27 0x00002aaab0987710 in ?? ()
28 0x00002b59d0ee2de2 in PyEval_EvalFrame (f=0x0) at Python/ceval.c:538
29 0x0000000000000000 in ?? ()