リクエストが多すぎるとアプリケーションがダウンする理由がわかりません。リクエストに応答するための最大容量についてアプリケーションをテストするにはどうすればよいですか?
2 に答える
リクエストが多すぎるとアプリケーションがダウンする理由がわかりません。
特定のアプリケーションについて質問している場合、その答えは、私たちにもわかりません。また、問題が何であるかを推測できる証拠もありません。証拠を探す場所:
- サーバーのログを確認してください。
- リバース プロキシがある場合は、プロキシのログを確認してください。
- バックエンド データベースのログを確認します。
- システム レベルのパフォーマンス統計を確認します。たとえば、VM のスラッシング、ディスク I/O の過負荷などの証拠を探します。
- 異常な GC 動作を確認します。
- 並行性のボトルネック、デッドロックなどを示す、ブロックされた/詰まったスレッドをチェックします。
一般的なケースで質問している場合は、さまざまな原因が考えられます。
- 外部リソースの不足 (データベース接続など)
- スレッドの作成が多すぎる
- リクエストのドロップやその他の壊れた戦略を避けるために、すべてのリクエストをキューに入れようとしています。
- 同時実行のボトルネック
- 負荷がかかるとパフォーマンスが低下する病理学的アルゴリズムまたはデータベース クエリの設計。
- 壊れたエラーの回復。たとえば、負荷が低いと予期しない例外が発生し始め、これがリソース リークを引き起こします。
- 等々 ...
そして、リクエストに応答する最大容量についてアプリケーションをテストする方法...
サーバーにリクエストを繰り返し送信するテスト ハーネスを作成し、サーバーが維持できる速度を確認します。これを行うための既存のフレームワークがあります。
アプリケーションが停止しているのはなぜだと思いますか? 長時間実行されている操作を行っているだけでしょうか?
「リクエストが多すぎる」というのは、リソース (DB 接続など) が不足しているように聞こえますが、この場合、ログのどこかに例外スタック トレースが表示されるか、同時実行性の問題が発生しているはずです。
確実に知るには、スレッド ダンプを作成し、すべてのスレッドが期待どおりに動作しているかどうかを確認する必要があります。アプリケーションのスレッド (データベース スレッド、ロジック、およびサーブレット スレッド) に注意を払うのは、最初だけです。Tomcat や SQL サーバーに何らかのバグが含まれている可能性は低いからです。ログを調べて (または必要に応じてログを追加して)、アプリケーションが期待どおりに動作しなくなった場所を探します。