• 締切済み

パフォーマンスの改善策は?

WINDOWS NT4.0+IIS+JRUNという環境でjavaで作成した業務系アプリのパフォーマンスを調査中なのですが、5台のクライアントから同時にアクセスすると1台の時より 3倍もの時間がかかります。ここで質問なのですが 最も時間をとっているのはDBへのコネクションを貼っているところなのです。このためコネクションプーリングを 用いるコードに改訂したのですが上記のパフォーマンス程度です。 (プーリングを用いる前はこの2倍かかっていました) パフォーマンスをあげるための改善方法として、効果的なものにどんなものがあるのでしょうか? ご教示ください。

  • Java
  • 回答数2
  • ありがとう数2

みんなの回答

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.2

何のDBを使っているか、やどういうpoolingをしているかが書かれてないのでそれなりにしか書けないのですが・・・ まずDBによって接続にかかる時間は変わります。よって検索能力がいくら高くても接続に時間が掛かるDBシステムでは結果として長い時間がかかる可能性があるため、DBそのものをすげ替える方法がその一。 なお、Oracleは接続処理のオーバヘッドが結構大きいそうで。 まぁ上記の回答では会社の上が納得しないでしょうから(なぜか日本では金額が高いものイコール品質の高いものと思う人が多いようです・・・保証規定とかをきっちり読めばFreeな物も高い商品も違いがないものが多いんですが・・・)Poolingをもっと高度にする事。現行でどういうPoolingしているのか分かりませんが、極端な話、Poolingクラスのコンストラクタでコネクションをいくつか生成し、finalize処理時にコネクションをクローズさせるようにして、さらに接続が必要なクラスからはPoolingクラスのインスタンス一つ相手に押し付ける事で接続のオーバヘッドを消す事が出来るはずです(ただ、シリアライズ処理や排他制御などはすべて不可能、もしくは自前で処理となるので余り現実的ではありませんが)。 次善策としてWebサーバと同様に同時接続数を限定し、同時接続数を上限として上記と同様のPoolingクラスと同様にコンストラクタ-ファイナライズ間で接続を保持するPoolingクラスのインスタンスを生成し、このインスタンスをweb側からの接続要求と結び付けるクラスを用意してやる事で(接続要求側は処理終了時点でPoolingインスタンスを返却する)接続のオーバヘッドをなくしたうえでDBの排他制御も利用する事が出来るはずです。 但し説続最大数を超えた要求が来た場合、それをIdlingさせておく必要があります。

mem_masa
質問者

お礼

質問内容が良くないのに丁寧に回答していただきありがとうございました。

  • SLIM
  • ベストアンサー率38% (191/491)
回答No.1

詳しくはないので 繋ぎのアドバイスとして・・・ IISのサービスウィンドを表示させ「パフォーマンス」というタブがありますよね? ここのHIT数を上げることによって多少調整ができるようです。 後はハードウェア的な調整でしょうか。 PentiumIII800EB*2 メモリ1024 RAID/0 メモリが512のときにはありましたが1024にしてから苦情は減りました(^^;

mem_masa
質問者

お礼

「パフォーマンス」タブのHIT数の調整は行いましたが 効果はありませんでした。 メモリーについては検討してみます。

関連するQ&A

  • WEBサーバーのパフォーマンスをあげるには?

    WINDOWS NT4.0+IIS+JRUNという環境でjavaで作成した業務系アプリのパフォーマンスを調査中なのですが、5台のクライアントから同時にアクセスすると1台の時より 3倍もの時間がかかります。ここで質問なのですが IISの設定はインストールした際のデフォルトのままなのですが、パフォーマンスをあげるために設定を変更するところがあるのでしょうか? ありましたらご教示ください。

  • コネクションプーリングの枯渇

    tomcat-Servletでの開発を行っています。 MVCモデルでのWEBアプリケーションです。 DBへの接続用として自作のコネクションプーリングを使用しています。 (プーリング数は20を設定) 基本的なSQL実行フローは下記のようになります。 1.コネクションプーリングを取得 2.SQL文を実行 3.コネクションプーリングを返却 ところが、時間を置いて psコマンドで確認すると、 だんだん数が減っていっているようです。 原因を調査しているのですが、 もし次のような原因で正しいかどうか分かりましたらご連絡ください。 <考えている原因> 要するに上記の3(返却)がされていないのであって。 ・実行処理中に利用者がクライアント側のブラウザを落としている。 と仮説を立てているのですが。 この仮説が正しいかどうか、 また、もし正しい場合には、どうすれば回避可能かをご教授ください。 補足の必要があればご連絡ください。 (コネクションプーリングの全文を載せたいのですが、  長すぎるようで・・・)

    • ベストアンサー
    • Java
  • WebクライアントでDBセッションを維持させたい

    C/S系システムをWebシステムに移行することを考えてます。 Webクライアントにおいて、アプリでログイン後にDBセッションをずっと保持させたままにしておきたいのです。(WebクライアントとDBセッションを1対1にしたい) APサーバ上でコネクションプーリングしてDBとのセッションを維持させておくことは知ってます。 実現方法や、実現された事例等がありましたら教えて頂けないでしょうか? DBはORACLEを利用してますが、 Webクライアントと dbms_session.unique_session_id を一意に定めたいのです。

  • サーブレットで使用しているBeanを通常のJavaプログラムで再利用したい

    サーブレットで使用しているBeanを通常のJavaプログラムで再利用したいと考えています。 通常のJavaプログラムというのは サーバにtelnetログインし javaコマンドで実行するプログラムを指します。 サーブレット側では、 JDBCを利用したコネクションプーリング(JavaBean)を使用しています。 通常のJavaプログラムでも、このBeanをimportして使用したいのですが、 実行時エラーとして、 Exception in thread "main" Backend start-up failed:FATAL: Sorry, too many clients already とエラー表示されます。 DBは postgres を使用しています。 使用するために必要な設定等わかりましたら教えてください。 コネクションプーリング(JavaBean)全文を記載したかったのですが、 字数制限に引っかかりましたので省略します。 必要あれば補足に記載します。

    • ベストアンサー
    • Java
  • JDBCのパフォーマンス

    JDBCのパフォーマンスがあがらず困っています。 LinuxマシンでOracleを稼働しており、そこにJDBCで接続しています。単一でのアクセスでは全く問題のないパフォーマンスですが、同時接続数が2以上になると途端に悪くなります。 # スレッド1→スレッド10でレスポンスに5倍の時間がかかってしまう。。。 OracleでMTS設定なども行ってみましたが、変わりませんでした。コネクションプールも行っています。 JDBCを用いてマルチスレッドでアクセスするときにボトルネックとなるポイント、チェック項目等、アドバイスをいただければ助かります。 よろしくお願いいたします。 [環境] Linux RedHat6.2J(カーネル2.2.14smp) Oracle8.1.6 JDK1.3.0 JDBCドライバ Oracleで配布しているclasses12.zip

  • MSDE2000のパフォーマンス低下

    MSDE2000のパフォーマンス低下 MSDE2000を使ったシステムがあるのですが、2,3ヶ月すると、目に見えてパフォーマンスが低下してしまいます。サービスを再起動すると、元のパーフォーマンスに戻るのですが、何か対処はあるのでしょうか?それとも、MSDE2000が開発用という事で、再起動するしかないのでしょうか? 環境 ・24時間連続稼動 ・4クライアントから読み書きしています。 ・OSは、MSDE2000がインストールされているPCも含め、5台ともWindows2000Server ・ソフトウェアの開発言語は、Visual C++6.0 こうしたら、という対処がありましたら、助言をお願いします。 以上、よろしくお願いします。

  • セッション数の取得について

    Windows2000+IIS5.0の社内サーバーに、100台のクライアントから接続を行っています。 現在のセッション数を調べる方法をどなたかご存知ないでしょうか。 時間ごとのセッションの数を調査する必要があるのですが、調べ方が判らず困っております。 コマンドプロンプト等も調べたのですが、判りませんでした。 よろしくお願いします。

  • 超お馬鹿。 ASPって?

    OS: クライアント Windows2000, サーバ NT4, IIS4 Editor: FrontPage2000 ASP未体験者につき、皆さんに失礼な質問をしてしまいますがお許しください。 Webのクライアント側で何か動作をさせるときにはVBScriptやJAVAなんかでスクリプトを記述することは以前やったことがあります。 ASPは、ASPの文法で書いたスクリプトが記述してあるHTML(拡張子はasp)をWebサーバ(IIS?)に発行するだけで動作するようになるのでしょうか。 それとも、サーバ側にログインして何か作業が必要なのでしょうか。 まったく理解していませんが、見捨てずに教えてください。 よろしくお願いします。

  • ASP.NETのパフォーマンスと接続クライアント数

    ASP.NETで、アプリケーションを作成しています。 主にイントラネットで使用する予定です。 環境は、以下のとおりです。 サーバー:Windows Server 2008 R2, IIS 7.5 データベース:SQL Server 2008 R2 開発環境:VS2010 C#, .NET Framework 4 5人程度で開発をしています。 aspxファイルの数は、50~60です。 上司からは、50クライアントくらいが同時に接続しても パフォーマンスが落ちないようにしろと言われていますが、 今回が初めてのWebアプリの開発で、クライアント数がどの程度 影響をおよぼすのか想像がつきません。 データベースは、メインで使用するテーブルのレコード数が 最大50万件(10年分)くらいになると想定しています。 普通のASP.NET作り方で、上記のような使用条件の場合、 パフォーマンスへの影響はどの程度あるのでしょうか。 (例えば、接続ユーザー数が5人→50人になると応答時間も10倍になるとか、・・・) それとも、ASP.NET MVCへの移行を検討したほうが良いのでしょうか。 (正直言いまして、ASP.NETは少し敷居が高いので、できればASP.NETで進めたいです。) 経験がおありの方、アドバイスをいただければ幸いです。 よろしくお願いいたします。

  • INSERT処理について

    JAVA初心者です。 ただ今、DB2サーバを用いての業務をしております。 そこで質問なのですが、JAVAでDB2のあるテーブルにC言語でいう構造体配列を一括でINSERTする方法があるのでしょうか? 今、1件ずつINSERTしているのでパフォーマンスが遅くて大変困っています。 よろしくお願いします。

専門家に質問してみよう