-
Notifications
You must be signed in to change notification settings - Fork 0
Description
レスポンスが異常に遅い件について、原因を調査中です。
ユーザーからの追加情報 (2025/06/10):
- どのようなリクエストでも時間がかかる。
- 常に発生する。
- 10数秒程度の遅延が発生する。
- Redmine以外のMCPサーバーでも同様の遅延が発生するため、DockerもしくはRust側の問題である可能性が高い。
ログ分析結果 (2025/06/11):
提供いただいたログを分析した結果、以下の点が明らかになりました。
-
MCPサーバーリクエストのタイムアウト:
[1749558410005] [ERROR] [MCP_PROCESS] Query #43 timed out after 30.003534472s
MCPサーバー(Node.jsやPython等で実装された実際の処理部分)へのリクエストが30秒のタイムアウト設定を超過しています。 -
プロセスロック取得の遅延:
[1749558410005] [DEBUG] [HTTP_HANDLER] Acquired process lock in 8.374173754s
HTTPリクエストハンドラがMCPサーバープロセスへのアクセス権(ロック)を取得するのに約8.37秒かかっています。これがレスポンス遅延の主な原因と考えられます。 -
MCPサーバー自体の応答速度:
タイムアウトが発生した後、次のリクエスト(Query #44)はMCPサーバープロセス自体は非常に高速に応答しています(約11.7ms)。
このことから、MCPサーバー(Node.jsやPythonで記述されたエージェントなど)自体の処理は遅くないと考えられます。 -
HTTPハンドラ全体の処理時間:
正常に完了したリクエスト(Query #44)でも、HTTPハンドラ全体としては約8.38秒かかっており、これはプロセスロック取得の遅延時間とほぼ一致します。
結論:
レスポンスが10数秒かかる主な原因は、Rust側のHTTPハンドラがMCPサーバープロセスへのアクセスロックを取得するのに非常に時間がかかっていることである可能性が極めて高いです。
これは、前のリクエストがタイムアウトした際に、ロックが適切に解放されない、あるいはプロセスが不安定な状態になり、後続のリクエストがロックを取得できるまで長時間待たされる、といったシナリオが考えられます。
開発者への依頼:
Rust側のロック管理機構、特にリクエストタイムアウト発生時のロック解放処理やプロセスの状態管理に問題がないか、コードレビューをお願いします。
ユーザーへの追加確認事項:
- 環境変数
RESPONSE_TIMEOUT_SECSとPROCESS_INIT_WAIT_SECSの現在の設定値を改めて教えてください。 - もし可能であれば、
RESPONSE_TIMEOUT_SECSの値を一時的に変更(例: 10秒や60秒)した場合、ロック取得の遅延時間や全体のレスポンス時間に変化が見られるか確認していただけると助かります。
引き続き、上記について情報提供をお願いします。