2016-04-22 4 views
6

私は72 GBのメモリが稼働しているサーバーを使用しています。これは25Gで並列GCとヒープサイズのJava 7を使用していました。しかし、Java 8に移行した後は、特定の作業がはるかに遅くなります。タスクは基本的にメモリ内の約15GBのファイルを読み込み、DB内の関連するデータを更新します。通常、ジョブを終了するのに約1時間かかりますが、Java 8以降は1.5時間になります。Java 8のGCが明らかにJava 7と比較して遅くなる

私が試した:50ギガバイトへ

  1. 増加ヒープサイズ=> CMSに平行から
  2. 変更GCアルゴリズムを助けていない、それは(1.8時間)であっても遅くなり

だから、私は私は見てみることができますかわからない、JavaライブラリはまだJava 7でコンパイルされているタスクを実行するが、私はこの関連するかどうかわからない? Java 7への切り替え後、パフォーマンスが戻ってきました。

+0

アプリケーションに対してプロファイラを実行しましたか?このファイルをロードするために使用しているサードパーティのライブラリは何ですか? –

+0

最新のJava 7?部分文字列が変更された場合の実装! 2つのベンチマークを比較して、パフォーマンスがどこにあるのかを確認してください。 –

+0

長時間かかるものはプロファイリングの恩恵を受けるでしょう。 (1分以上かかるものはIMHOでなければなりません) –

答えて

2

GCの問題を見つける/比較するために、それはGCログを有効にする方が良いでしょう:

  • -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps -Xloggc:ログ/ gc.log

と使用GCViewerは、GCログファイルを解析/可視化します。 GCログを収集して質問に添付すると便利です。

理論上(そして実践上)、Java 8はJava 7より高速です。JavaはデータをDBに書き込むと述べました。両方のリソース消費量を分析する価値があるかもしれませんが、DBが根本原因かもしれません。

+0

こんにちは、私はこれらのフラグのためにこの感謝を見てみましょう! –

関連する問題