- 締切済み
WEBアプリケーションでレスポンスが帰る前に再度リクエスト投げるとサーバに高負荷がかかるのはなぜ?
業務用WEBアプリケーションを保守しています。 クライアント端末(WindowsXP IE6)で リクエストとなるボタンをクリックしてから ブラウザにレスポンスが返るまでに 複数回クリックすると(ダブルクリックなど) アプリケーションサーバのCPU使用率が急上昇し ついには100%になってしまう現象に悩まされています。 アプリケーションはJAVAでサーバはSun Java System application server 9を使っています。 CPU使用率が急上昇するときはそのjava.exeが占めています。 普段50クライアントほどがアクセスしているのですが java.exeはたまに70%近くまで占めるときがありますが ほとんど数パーセントで遷移しています。 メモリは常時80%ほど使っています。 ハード的にめいっぱい積んでいます。 WEBアプリケーションが乗っている同じ端末に データベースも同居しています。MySQLです。 mysql.exeは上記高負荷のときも普段とCPU使用率は さほど変わりません。 一度クリックされたらボタンを非活性にするスクリプトを入れていますが、高速で(?)複数回クリックされるときかないようです。 なぜなのか原因がわかれば別の対策を考えるのですが ご存知の方がいらっしゃればご教示願いたいです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- arain
- ベストアンサー率27% (292/1049)
どれか一つの問題を上げろというならば、JAVAで動作しているシステムの作り方の問題の可能性が高いです。 リアルタイムシステムは、基本的には一つのイベント(処理)が終わってから次を行うのではなく、要求されたイベントに対して優先順位の高い順に処理を行います。 つまり、処理を行っている時にも複数の処理を受け付けることができることになります。 そのため、ソフトはあるイベントを処理中に別のイベントが発生した場合にどう処理を行うかを十分に検討する必要がありますが、その設計不十分な場合余計な処理を行うことにより高付加がかかる可能性があります。 この設計の不備が最悪のケースで現れればシステムフリーズやデータベース破壊という致命的なバグとして顕在化することになります。
補足
回答ありがとうございます。 まさにシステムフリーズ→コンテナ再起動の悪循環、最悪ケースです。。。 JAVAではJSF、Hibernateを採用しています。 >ソフトはあるイベントを処理中に別のイベントが発生した場合にどう処理を行うか について開発側は特に意識していないようです。 やはり「設計不十分」ということになるのですね・・・ Sun Java System Application Server、(Apache内包)のチューニングでどうにかならないかと奮闘中です。