HorimotoYasuhiro
null+****@clear*****
Fri Jul 14 14:49:38 JST 2017
HorimotoYasuhiro 2017-07-14 14:49:38 +0900 (Fri, 14 Jul 2017) New Revision: bb8163f79ebb05037e3afecd0f533e631fb1f163 https://github.com/groonga/groonga/commit/bb8163f79ebb05037e3afecd0f533e631fb1f163 Merged a004f1a: Merge pull request #744 from komainu8/feature/add_troubleshooting Message: Add how to troubleshooting Added files: doc/source/troubleshooting/how_to_analyze_of_error_message.rst Added: doc/source/troubleshooting/how_to_analyze_of_error_message.rst (+74 -0) 100644 =================================================================== --- /dev/null +++ doc/source/troubleshooting/how_to_analyze_of_error_message.rst 2017-07-14 14:49:38 +0900 (9f4787d) @@ -0,0 +1,74 @@ +.. -*- rst -*- + +.. highlightlang:: none + +エラーメッセージの解析方法 +========================== + +Groongaは様々なエラーメッセージを出力しますが、出力されたエラーメッセージ +をもとに、原因を解析する方法はいままで、明文化していませんでした。 +ここでは、エラーメッセージごとの解析方法を記載します。 + + +ソケットエラーの解析方法 +------------------------ + +ここでは、Groongaで発生するソケットエラーの解析方法について説明します。 + + +例 +^^ + +Groongaのエラーログで以下のようなエラーログがあります。(xxxxxには任意の数字が入ります。):: + + socket error[xxxxx]: no buffer: accept + + +解析方法 +^^^^^^^^ + +まず、ソケットエラーを扱うマクロである、SOERR というキーワードでGroongaのソースコードをgrepします。 + +次に見つかったSOERRの引数にacceptが入っているSOERRをさがします。 +すると次のSOERRが見つかります。ログに出ているのはacceptのみなので、下記の最後の行が例で出力されたエラーメッセージに該当するとわかります。:: + + lib/com.c: SOERR("listen - start accept"); + lib/com.c: SOERR("listen - disable accept"); + lib/com.c: SOERR("accept"); + + +該当するエラー出力の周辺のコードを見ると以下のようになっています。:: + + grn_sock fd = accept(com->fd, NULL, NULL); + if (fd == -1) { + if (errno == EMFILE) { + grn_com_event_stop_accept(ctx, ev); + } else { + SOERR("accept"); + } + return; + } + +上記のコードから、acceptを実行してエラーが発生したことが確認できます。 +次は、acceptが失敗した原因を追っていきます。 + +acceptが失敗した理由は、:: + + [10055]: no buffer + +から追うことができます。 +10055はWindowsのソケットエラーコードを表しています。また、no bufferはSOERRマクロ内でGroongaが用意しているメッセージです。 +Windowsのシステムエラーコードから調査しても良いですし、Groongaが出力しているエラーメッセージから調査しても良いです。 + +Windowsのシステムエラーコードは以下のページに一覧があります。:: + + https://msdn.microsoft.com/ja-jp/library/windows/desktop/ms740668(v=vs.85).aspx + +システムエラーコードまたは、エラーメッセージから調査すると、acceptが失敗した理由は、WSAENOBUFSであることがわかります。さらに、WSAENOBUFSが発生する原因を調査するとWSAENOBUFSが発生する原因は以下であることがわかります。:: + + No buffer space available. + + An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full. + +上記のメッセージから、acceptが失敗する原因は、メモリー不足または、接続数が多すぎる場合であることがわかりました。 +あとは、エラーメッセージが出た際の状況から、接続数が多かったのか、メモリ不足だったのかを判断します。 -------------- next part -------------- HTML����������������������������... Télécharger