2017-01-12 2 views
1

ユーザー数が急増したとき(ユーザー数が200以上の場合)、私はhibernate framework.Applicationでエンタープライズアプリケーションを開発しました。次のメソッドを試しましたが、それでも問題は解決しません。Hibernate Webアプリケーション

1)C3PO接続プーリングは、(以前は接続プーリングを使用しない)

2)

3)値100の前に(300に接続プールのサイズを休止増加)

のOpenSession

にgetCurrentSession方法を変更しましたhibernate.cfg.xmlファイルは connection.pool_size = 300

このメソッドを使用して呼び出されます -

@Override

公衆リストgetLovServiceSqlParam(文字列のクエリ、[]オブジェクトobj){

// TODO Auto-generated method stub 
    Session session = null; 
    if (this.getHibernateTemplate() != null && query != null 
      && query.length() > 0) { 

     try 
     { 
      session = this.getHibernateTemplate().getSessionFactory().openSession(); 
      SQLQuery query1 = session.createSQLQuery(query); 

      for(int i=0;i<obj.length;i++) 
      { 
       query1.setParameter(i, obj[i]); 
      } 
      result = query1.list(); 
      session.close(); 
     } 
     catch (DataAccessException e) { 
      e.printStackTrace(); 
      throw e; 
     } 

     finally 
     { 
      if (session != null && session.isOpen()) { 
       session.close(); 
      } 
     } 

    } 

    return result; 
} 

答えて

0

の状況のその種は、コードを見ることではなく、CPUサンプリングツールを実行することによって解決されていない(等jvisualvm、無料でOracle JVMパッケージに含まれています。参照先:$JAVA_HOME/bin/jvisualvm)、アプリケーションがロードされています。

あなたのUIスレッドがほとんどの時間を費やしている場所を見て、これらの部分を順番に最適化してください。

これは、データベースへの接続がなくなったことや、一部のクエリで競合が発生したか、まったく予想外だったことが原因である可能性があります。あなたは、CPUのサンプリング分析を実行した後にのみ知っているでしょう。 (生産エンバイロメントと同じ動作を表示エンバイロメントを取得することは容易ではないかもしれませんが、jvisualvmを得るためにさらに困難かもしれない負荷の下でアプリケーションに

  • 接続jvisualvm、これを行うには

    Samplerタブに生産エンバイロメントへのアクセス、あなたは仕事どこITに依存する規則)、

  • 切り替え、その後、あなたのUIでアクションCPUボタン、
  • トリガーをクリックして(通常はこのアクションはあまりにも(予期しない動作を持つべきですスロー ?))。
  • 完了したらSnapshotボタンをクリックしてください。
  • そこからあなたのUIスレッドを見つけて(それは簡単ではないかもしれません)、そしてそれがどこの時間を費やしているのか見てみましょう。
  • この部分を最適化する
+0

スレッド分析は複雑すぎます。アプリケーションがハングした場合、getNamedQueryメソッドはアクションクラスからまったく呼び出されません。 getNamedQueryメソッドより前のSysoutsはログに出力されていますが、メソッド内の他のsysoutsは全く出力されません。つまり、getNamedQueryは実行されず、結果はレンダリングされません –

関連する問題