RED Hat Linux でのセグメンテーション エラーが原因で、C++ アプリケーションがクラッシュする問題に直面しています。C++ に埋め込まれた Python を使用しています。
私の限界以下を見つけてください
- アプリケーションがクラッシュする本番マシンにアクセスできませんか。アプリケーションがクラッシュすると、クライアントからコア ダンプ ファイルが送信されます。
- 問題は、本番マシンとまったく同じ構成のテスト マシンでは再現できません。
- 1 時間後、4 時間後、1 日後、または 1 週間後にアプリケーションがクラッシュすることがあります。アプリケーションがクラッシュする時間枠や特定のパターンはわかりません。
- アプリケーションは複雑で、埋め込まれた Python コードはアプリケーション内のさまざまな場所で使用されます。広範なコード レビューを行いましたが、コード レビューを行っても修正を見つけることができませんでした。
- コア ダンプのスタック トレースによると、乗算操作の周りでクラッシュしています。コード内のそのような操作のコードを確認しましたが、そのような操作が実行されるコードは得られませんでした。そのような操作は、組み込みの python から実行された python スクリプトを介して呼び出され、制御できないか、確認できない可能性があります。
- Valgrind のような本番環境ではプロファイリング ツールを使用できません。
- ローカル マシンで gdb を使用して、コア ダンプを分析しています。本番マシンで gdb を実行することはできません。
私たちが行った取り組みを以下に示します。
- 問題を再現するために、ログを分析し、テスト環境でアプリケーションに送信されるリクエストを継続的に発行しました。
- ログにクラッシュ ポイントが記録されていません。毎回異なるログを取得します。私はこれが原因だと思います; メモリが別の場所で破壊され、しばらくするとアプリケーションがクラッシュします。
- アプリケーションの任意の時点で負荷をチェックしましたが、アプリケーションの制限を超えることはありません。
- アプリケーションのメモリ使用率も正常です。
- テスト マシンで Valgrind を使用してアプリケーションのプロファイリングを行い、valgrind エラーを削除しましたが、アプリケーションはまだクラッシュしています。
問題を解決するためにさらに先に進むための助けをいただければ幸いです。
以下、バージョン詳細
Red Hat 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 ?? ()