1

doPost メソッドを持つ Java サーブレットがあり、doPost が終了すると、Glassfish が接続を閉じると思っていましたが、間違っていました。サーブレットは Linux サーバー上にあり、300 件の投稿後にスレッド数が返されます。

ps -eLFU glassfish | grep domain1 | wc -l
362

投稿前のスレッド数は 72 でした。応答はすべて成功していますが、Glassfish が接続を閉じない理由がわかりません。Glassfish のデフォルト設定を使用しています。

この問題を解決しようとしている理由は、ある時点でサーブレットがヒットすると、Linux サーバーで次のエラーが発生するためです。

su: cannot set user id: Resource temporarily unavailable

/etc/security/limits.conf には、次のものがあります。

glassfish hard nproc 4192
glassfish soft nproc 2024

私は limits.conf を更新したくありませんが、代わりにそれらの数値に達しないようにしています。

4

2 に答える 2

1

Glassfishは接続を開いたままにしていますか?または実行中のスレッド?それらは異なるものです。スレッドは開始される可能性があり、将来、新しい接続にサービスを提供するためにシャットダウンされない可能性があります。これが標準の動作です。「kill-3PID」を使用してスレッドダンプを取得できますか。ここで、PIDはGlassfishプロセスのプロセスIDです。これにより、実行中のすべてのスレッドが標準出力にダンプされ、各スレッドが何をしているかを確認できます。そこで、コードがスタックしているか、新しい接続を待っているかを確認できます。スレッドダンプを取得する方法の詳細については、こちらをご覧ください。

于 2013-02-19T13:55:58.810 に答える
0

コードの問題である問題が見つかりました。サーブレットはクライアントを使用して Web サービスを呼び出しますが、クライアントはシングルトンである必要がありました。もともと私は、サーブレットへの POST ごとにクライアントを作成していましたが、これにより、glassfish の下に多くのスレッドが作成されました。クライアントをシングルトンにすると、スレッド数が大幅に減少しました。

于 2013-02-20T17:42:06.563 に答える