FULL GCの隠れた危険性の調査の最適化

2417 ワード

最近、他の業務ラインのフィードバックが統一された国際化案はFULL GCを招きやすい.まず、国際化案を簡単に言えば、1つのfilterを実現し、すべてのhttp要求をフィルタリングし、要求ヘッダ情報に含まれる言語環境をsessionに格納し、responseを再実現し、文案統一に対して符号化の防犯を採用し、response出力時に符号化を言語環境によって置き換える.
ここでひとつ問題がありますが、リクエスト量の多いアプリケーションであれば、セッションのライフサイクルのためにFULL GCが発生する可能性があります.この危険性を排除するために、まずapiのアプリケーションをチェックし、メモリの使用状況を確認し、GCの状況コマンドを以下のようにします.
1.sudo -u jetty jstat -gcutil pid
2.grep -n "CMC-initial-mark"gc.log.0.cuurnet
一部のセッション対象者が回収されていないことが判明し、古い時代に入ると、機器のメモリが大きいため、対応するアラームがなく、FULL GCの時間も短い
しかし、requestを最適化する必要がある.getSesssionを変更したり、私たちがプロジェクトを適用して自分で期限を設定したりします.現在、デフォルトはjetty容器の30分で15回期限が切れています.ygcも15回回収できません.ygcは30分以上古い年代に入ってfullgcをもたらすことはありません.具体的な案は以下の通りです.
1.getSession()を除去する代わりにsetAttributeを使用
2.session.setMaxInactiveInterval(5);
/**
 *
 * Specifies the time, in seconds, between client requests before the
 * servlet container will invalidate this session.  A negative time
 * indicates the session should never timeout.
 *
 * @param interval    An integer specifying the number
 *              of seconds
 *
 */

public void setMaxInactiveInterval(int interval);

3.web.xmlには次の情報が構成されています.
        

               ( )


4.tomcat/conf/server.xmlでdefaultSessionTimeOut=時間(分)を定義する
最適シナリオ1>2>3>4
httpRequestServiceletライフサイクルについて少し説明します
サーブレットコンテナが起動すると、クライアントが要求コンテナを実行すると、その要求に対するサーブレットRequestオブジェクトとサーブレットResponseオブジェクトが作成され、対応するサーブレットオブジェクトのサービス()メソッドが呼び出されます.
コンテナがクライアントに結果を返すと、サーブレットRequestオブジェクトとサーブレットResponseオブジェクトが破棄されます.
httpServletRequest
/**
 *
 * Returns the current session associated with this request,
 * or if the request does not have a session, creates one.
 *
 * @return    the HttpSession associated
 *       with this request
 *
 * @see    #getSession(boolean)
 *
 */

public HttpSession getSession();
HttpSession役割ドメイン大ライフサイクルも長いメモリに蓄積しやすい
JAvaWeb 4種類の役割ドメインオブジェクト
义齿
pageContext                         
属性の役割範囲は現在のjspページに限られ、servletではオブジェクトを取得できません.
request
属性の役割範囲は同じリクエストに限られ、主に転送を要求するために使用されます.
session
プロパティの有効範囲は1回のセッションに限定され、ブラウザが開くから閉じるまでは1回のセッションと呼ばれ、servletでrequestオブジェクトで取得されます.
application
属性の作用範囲は現在のWEBアプリケーションに限られており、範囲最大の属性作用範囲であり、一箇所に属性を設定すれば、他各所のjspやservletで入手可能であり、servletではサーブレットContextオブジェクトに対応する