Javaアプリでエラーがでる場合
Posted: | Tags: java
富士通のServerViewの管理画面でJavaのエラーが出て困っていた。
下記の設定変更を行うとエラーが出なくなる。
Read more...Posted: | Tags: java
富士通のServerViewの管理画面でJavaのエラーが出て困っていた。
下記の設定変更を行うとエラーが出なくなる。
Read more...Posted: | Tags: java
||オプション ||説明 ||-Xms ||ヒープ全体の初期値 ||-Xmx ||ヒープ全体の最大値 ||-XX:NewSize ||New領域の初期値(-Xmnと同じ) ||-XX:MaxNewSize ||New領域の最大値 ||-XX:PermSize ||Permanent領域の初期値 ||-XX:MaxPermSize||Permanent領域の最大値 ||-Xss ||スレッドスタックの領域(デフォルト512k)
※OSによっては1つのJavaプロセスに割り当てられるヒープに制限がある場合があるので注意が必要
http://docs.oracle.com/cd/E19528-01/820-1613/6nd986vcr/index.html#abeii
||オプション||説明 ||-client || HotSpot VMのクライアントモードを有効化 ||-server || HotSpot VMのサーバーモードを有効化
※HotSpot VMは-clientと-serverオプションによりクライアント用VMとサーバ用VMを使い分けることができる。
※HotSpotはクライアント版、サーバ版と呼ばれる二つの互換版からなる。クライアント版は必要不可欠なクラスやメソッドのみを素速くロードしコンパイルするようチューニ ングする。サーバ版は、よりゆっくりロードを行うが、より高性能な高度に最適化されたJITコンパイル結果を産出することに、より尽力する。
http://d.hatena.ne.jp/tanakakns/20120508/1336467306
まとめると以下くらいの感じでよいのでは。
Webアプリを想定。
-server
-Xms1024m
-Xmx1024m
-XX:NewSize384m
-XX:MaxNewSize384m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseParNewGC
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=32
-XX:TargetSurvivorRatio=80
-Xloggc:/[ログ出力先]/gc.`date '+%Y-%m-%d'`.log
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PringGCDateStamps
-XX:+PrintClassHistogram
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/[ヒープダンプ出力先]/java.hprof
Posted: | Tags: java
問題発生 → 基本データ分析 →GCログ解析
-Xms、-Xmxを指定し、OutOfMemoryErrorが発生しないようにヒープを広げる。
GCログを取得し、ヒープでのメモリリークが発生していないか確認する。
GCログを侍やGCViewer、Excel等でグラフ化して確認する。
グラフがFull GCを跨って、右肩上がりになっている場合は、メモリリークが発生している可能性が高い。
リーク箇所を発見するには、ヒープ統計情報やヒープダンプを数回取得して比較して、Full GCを経ても増加し続けているオブジェクトを探す。
怪しいオブジェクトが見つかれば、NetBeans Profiler等を使用して、オブジェクトの使用箇所を探し、オブジェクト参照を追跡する。
Full GC実行時間を最小にするために、OutOfMemoryErrorが発生しないサイズでなるべく小さいサイズを-Xms、-Xmxに指定する。
Read more...Posted: | Tags: java
http://d.hatena.ne.jp/tanakakns/20120508/1336467306
| ^^^^^Javaヒープ | JavaVM上で起動するJavaプログラムのリソースを管理する領域。New領域とOld領域で構成される。 | ||
|---|---|---|---|
| ^^^New領域 | 新規オブジェクトと閾値(-XX:MaxTenuringThreshold)未満のオブジェクトが配置される。(Young領域とも呼ばれる) | ||
| Eden領域 | 新規のオブジェクトが配置される。 | ||
| From領域 | CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされる。(S0やS1とも呼ばれる) | ||
| To領域 | CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされる。(S0やS1とも呼ばれる) | ||
| Old領域 | New領域で閾値(-XX:MaxTenuringThreshold)を超えたオブジェクトが配置される。(Tenured領域とも呼ばれる) | ||
| Permanent領域 | クラスやメソッドの情報が格納される領域であり、アプリケーション起動後はほとんど増減しない。 | ||
| Cヒープ | JavaVM自身のリソースを管理する領域。NativeMethod、Javaスレッド自身、(8k以上の)バッファ領域として利用される。 | ||
| スレッドスタック | スレッド毎に保持するスタックの領域。 |
※「New領域」=「Eden領域」+「From領域」+「To領域」
※From、To領域をあわせてSurvivor領域と呼ぶ。
http://d.hatena.ne.jp/tanakakns/20120508/1336467306
<pid> 5000<pid>を実行 (Java 1.5の場合)<path_to_file>)、-XX:+PrintClassHistogramを設定しておき、kill -3 <pid>を実行<pid>(Java 1.5の場合)<pid>(Java 1.6の場合)<pid>」で実行してみる※上記の方法で詳細なヒープ情報を取得可能であるが、出力には時間がかかり、また負荷も大きいので注意が必要。
Read more...Posted: | Tags: java
全オペレーティング・システム用のJavaのダウンロード Version 6 Update 39
すごい沢山のチューニングポイントがある。
Javaメモリ、GCチューニングとそれにまつわるトラブル対応手順まとめ - 日記のような何か
JVM SNMP監視オプション
Posted in Java, Tomcat by admin
Sun JDK1.5以上のTomcatの起動オプションでJVMのSNMP監視機能を有効にする場合は、
以下のような引数を追加することで可能となる。
「CATALINA_OPTSとJAVA_OPTSの違い」で記述したように、
Tomcatの環境変数に設定する場合は必ず「CATALINA_OPTS」に定義すること。
JavaVMの中を調べることはできないか? Java VM(Java仮想マシン)には、JVMPIやJVMTI、JVMDIと呼ばれる、
パフォーマンス情報を提供するための専用APIが備わっています。
この仕組みを利用して、Java EEアプリケーションサーバーからパフォーマンスデータを収集し、チューニングをサポートするのがプロファイラ(計測ツール)です。
プロファイラの基本機能は以下の2点に集約できます。
Javaアプリケーション内の各クラス・メソッドの呼び出し関係の記録と、それぞれの処理に掛かった時間の計測
実行中のJava VMに割り当てられているヒープ領域を監視し、オブジェクトの生成状況を調査
また、製品によっては、以下のような機能を付加することで、より幅広い視点でJavaアプリケーションの品質を分析できます。
テスト網羅率を数値化できるカバレッジ計測、デッドロックなどスレッド問題の検出
CPU、HDDなどハードウェア情報の収集
JVMTI(Java Virtual Machine Tool Interface)の方が新しい。 Java6からはJVMTIのみが正式サポートという扱い。
22.8. Java 対応の OProfile サポート - Red Hat Customer Portal
[[Java講座 [Javaのメモリ管理 - GC、ガベージコレクション、Heap ]|http://www.site-cooler.com/java/j2se/memory.htm]]
ガベージコレクション
Heap領域
メモリリーク
について書かれている
Read more...