0

私は私を夢中にさせ、あなたの助けを必要とする問題を抱えています。セットアップは次のとおりです。-プロセッサ4コア+HT(Linuxは8 cpusと言います)-centos --glassfish 3(最新バージョン)-glassfishでは1つのアプリケーションのみが実行され、http-listener1はポート8080でリッスンします(管理リスナーはオンです、 httpsオフ)-接続プールがあります

すべてが数日間正常に機能し、その後突然停止します:-ロードが400になります-javaプロセスのCPU使用率が800になります-gfがページの提供を停止するか、非常に遅く提供されます:-管理リスナー(ポート4848)は正常に実行されています-プロファイラーを起動しました。すべて正常に動作しているようですが、何が問題なのかわかりません。

どこを見ればいいのか、どうやって問題を解決するのか、これ以上のアイデアはありません。大量のユーザーがサイトにアクセスすると問題が発生するようですが、問題はユーザーがいなくてもgfが回復しないことです。

何か案は?

コメントから貼り付けたJVM設定を編集します。

JVM設定:

<jvm-options>-Xms10240m</jvm-options> 
<jvm-options>-Xmx10240m</jvm-options> 
<jvm-options>-XX:CMSIncrementalDutyCycle=10</jvm-options>  
<jvm-options>-XX:CMSIncrementalDutyCycleMin=10</jvm-options>  
<jvm-options>-XX:+CMSIncrementalMode</jvm-options>  
<jvm-options>-XX:+CMSIncrementalPacing</jvm-options>  
<jvm-options>-XX:+UseConcMarkSweepGC</jvm-options>  
<jvm-options>-XX:MaxPermSize=512m</jvm-options>  
<jvm-options>-XX:NewRatio=2</jvm-options>  
<jvm-options>-XX:PermSize=512m</jvm-options>
4

2 に答える 2

2

サーバーは、ほぼ無期限の GC スラッシングに陥る可能性があります。OutOfMemory エラーをスローすることなく、この状況がサーバー上で約 3.5 時間続いていました...

使用したフレームワークでメモリ リークが発生しました。我々のしたこと:

そして、状況を修正します。

  • また、GC 設定を調整する必要があるだけで、メモリ リークが発生しない場合もあります。
  • 何が起こっているのかを確認するためにGC ロギングを有効にするのがおそらく賢明です。
于 2013-02-28T15:15:09.793 に答える
0

この 800% の CPU 使用率は、割り当てに失敗したようです。

CMS を有効にすると、GC はアプリケーションが消費するよりも速くメモリを解放しようとします。割り当ての失敗は、この要件を満たすことができない場合です。その場合、JVM が持つ唯一の解決策は、ParallelGC を使用して完全なコレクションを実行することです。つまり、次のことを意味します。

  • サーバーが完全に停止しています
  • ParallelGC は可能な限りすべての CPU を使用して、できるだけ早く終了しようとします。

この割り当て失敗の仮定が正しいことを確認するには、GC ロギングを有効にする必要があります ( -Xloggc:gc.log -XX:+PrintGCDetails)。各「Full GC」行は、割り当ての失敗です。

GC ログを取得したら、次のスクリプトを使用して、iCMS のデューティ サイクルが実際に約 10% の CPU 使用率であるかどうかを確認してください。より詳細な説明はこちらにあります

@ppeterka が言ったように、アプリケーションをプロファイリングしてメモリ消費を減らすことができますが、より多くのメモリを与えることもできます。と に同じ値を設定しないでください。フラグと を削除し-Xmsてください。-Xmx-XX:CMSIncrementalDutyCycle-XX:CMSIncrementalDutyCycleMin

その助けを願っています!

于 2013-04-13T09:04:49.563 に答える