スペース地上ステーションサーバの非正常なシャットダウン問題の分析
9197 ワード
1.問題現象
地理的な場所で実行中、サーバ・プログラムがデバッグ・ウィンドウで異常に閉じるという問題が発生することがあります.
2.原因分析
2-1. ポップアップ・エラー・メッセージの分析
2-1. ポップアップ・エラー・メッセージの分析
Debug Assertion Failed
→プログラムが正常に動作するために必要な環境条件をチェックし、プログラムが正常でない場合、プログラムのメッセージを終了して出力する(_osfile(fth) & FOPEN)
→正常な検査に使用する環境条件で文法を検査し、この文法検査は失敗したことを確認するwrite.c
→ファイルのオープン/書き込み/読み取りなどに関するFramework(Visual Studio 2005)内部ソースコード2-2. エラーメッセージが発生する可能性のある仮定を確立
(1)閉じたファイルの書き込みを試みる.
int __cdecl _write(int fh, const void* buf, unsigned cnt) {
...
// 68번 라인, 디버그 모드에서 Asssertion 구문
_VALIDATE_CLEAR_OSSERR_RETURN((_osfile(fh) & FOPEN), EBADF, -1);
...
// 릴리즈 모드에서 위와 동일한 역할 수행
if (_osfile(fh) & FOPEN) {
...
} else {
...
// 릴리즈 모드에서 출력 될 오류 메시지
_ASSERTE(("Invalid file descriptor. File possibly closed by a different thread", 0));
}
return r;
}
(2)512個以上のファイルを同時に開いて書き込んでみる
C run-time I/O now supports up to 8,192 files open simultaneously at the low I/O level. This level includes files opened and accessed using the _open, _read, and _write family of I/O functions. By default, up to 512 files can be open simultaneously at the stream I/O level. This level includes files opened and accessed using the fopen, fgetc, and fputc family of functions.
for (int i = 0; i < 512; i++) {
str.Format("D:\\%d.txt", i);
errno_t e = fopen_s(&fp, str, "w");
int ret = fwrite("test", sizeof(char), strlen("test"), fp);
}
2-3. ファイル計算ログの収集
プロセスモニタの使用方法
2-4. ログ解析
2-5. 実行可能ファイル(EXE)とライブラリファイル(DLL)の相関分析
サーバー・プログラムがファイルと使用するすべてのライブラリ・ファイルの設定を実行できることを確認し、同じ設定が正しいことを確認します.
使用中のDLLファイルの中にはソースコードがないものもあり、Walkerツールに依存してステータスチェックを行います(MFC 80 D.DLL、MSVCR 80 D.DLLに相関がある場合は、マルチスレッドDLL設定であることを確認します)
2-7. エラーの再生時にProcDumpプログラムログを解析する
Proc Dumpプログラムを使用して、プログラムが正常に終了しない場合にプログラムコンテキスト(ソースファイル、関数、ソース線、呼び出しスタックなど)を確認します.
ProcDumpプログラムの使用例
ダンプファイル 異常終了点のコードが確認され、特定のソースコードのfopen以降のfwrite呼び出し中に異常終了が確認されました
このコードは、毎秒約13000バイトのサイズのログをファイルに記録し、本番チームとともにログが未使用のゴミログであることを確認し、関連コードを削除します.
fwrite()呼び出し時にプログラムがハングアップした理由を特定できません
3.処理結果
Reference
この問題について(スペース地上ステーションサーバの非正常なシャットダウン問題の分析), 我々は、より多くの情報をここで見つけました https://velog.io/@joosing/우주지상국-서버-비정상-종료-문제-분석テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol