4

Web アプリケーションが起動した後のある時点で、Can't handle a new request, too many request threads alreadyhunchentoot から警告が表示され始め、対応する http-service-unavailable 応答がブラウザーに表示されます。問題は、これが通常のリクエスト処理に戻らないことです。つまり、一部のリクエスト ハンドラが戻ることなく「ハング」するため、これらのハンドラが十分に呼び出されると、最大スレッド カウントに達し、そのままになります。現在のスレッドのリストを取得し、そのうちの 1 つの現在のコール スタックを調べて、どこに問題があるかを調べるにはどうすればよいですか? これは意味がありますか?他の警告は表示されません。調査を開始する方法について何かアドバイスはありますか?

4

1 に答える 1

3

SBCL (Windows) でも同じ動作が見られます。問題は、クライアントが Keep-Alive ヘッダーを送信していることにあるようです。これは、リクエストが処理された後もワーカー スレッドを実行し続けることで、hunchentoot がこれを尊重します。次の入力を待ってアイドル状態になりますが、残念ながら、ソケットがタイムアウトすることはなく、スレッドが終了することもないため、機能していないサーバーに非常に迅速にアクセスしました。同じコードが (Ubuntu) Linux で正常に動作するため、これは Windows 固有の問題のようです。

@Paralife スレッドを一時停止して、そのコールスタックを確認できます

(bt:interrupt-thread スレッド #'break)

(bt:all-threads) を使用して、必要なスレッドを取得できます。

于 2014-03-18T10:44:54.027 に答える