umegon2018/07/30 00:57ご回答ありがとうございます。 verbosegcオプションについて検索致しました。 標準出力ですと [GC (Allocation Failure) 5345K->3960K(9728K), 0.0013894 secs] [Full GC (Allocation Failure) 3960K->2735K(9728K), 0.0036841 secs] このような感じにログが出てきて、左側が元々のメモリ使用量で その値の最大値をツール等で調べるということになりますでしょうか?
matobaa2018/07/30 13:23「実際に使用・必要されたその日最大のメモリ量」の定義にもよりますが、FullGC時の右側の数字を見ればよいかと思います。厳密ではないですが、だいたいの傾向はつかめるでしょう。
umegon2018/07/31 00:53最近JAVAに触れたばかりなので、「実際に使用・必要されたその日最大のメモリ量」というあいまいな言い方になってしまい申し訳ございません。 JAVAがある程度のNEW領域やOLD領域などの必要な領域をメモリに予約して 処理要求などの必要に応じ、そのメモリを使用していくイメージを思っております。 (xmsとxmxで固定化している場合) 例えば4GBのメモリをJAVAが予約したとして、本当にJAVAが必要としたメモリはいくらなのかということを知りたくて、「実際に使用・必要されたその日最大のメモリ量」という言い回しをさせて頂いておりました。 高負荷がかかっても1GBぐらいしか使用しないシステムに4GBの予約をしていたら、無駄とは言いませんが、AWSのようなPaas環境だった場合、スペックを落とし割り当てを2GBくらいまで減らすことにより、維持費の削減などを行えるのかなと考えております。 >FullGC時の右側の数字を見ればよいかと思います。 上記の例ですと3960kに値すると認識しております。 しかし何故FULLGCの時なのでしょうか? GCの時の対象がNew領域、FullGCの時の対象がNew領域とOld領域のお掃除なので GCの横のログはNew領域のメモリ量になってしまうということなのでしょうか? 幾度の質問となってしまい、申し訳ございません。 可能でしたら、ご教示頂けると嬉しいです。よろしくお願いいたします。
matobaa2018/08/01 03:54「最近JAVAに触れたばかり」とおっしゃっていますが、おおむね正しく理解できていらっしゃいますね。 GCとはゴミ掃除なわけですが、FullじゃないGCだとOld領域にはゴミが残ったままの量になります。FullGCであればOld領域のゴミも掃除したあとの量になってます。 ただ、この量ぴったりにXmxを設定してしまうと身動きが取れなくなってしまうので遊びが必要です。そこはもう、ゴミを散らかすことができるワークエリアをどれくらいとるか、GCにかかる時間をどこまで短くしたいか、といった方針を立てたうえで決めることになるでしょう。ゴミは無駄ですがキャッシュは性能に寄与するだとか、検討要素はほかにもあります。 メモリを拡大する時間を許容できるシステムなのであれば、とりあえず Xms < Xmx で起動しておいて、結果としてどこまで広がったのかを調べて、それをXmsに設定する、といった簡単なアプローチでもいいんじゃないのかなーと。
umegon2018/08/02 01:52ご回答ありがとうございます。Qiitaやブログなどに分かりやすくまとまっているので、そのようなところで基礎は調べさせていただいております。 記載した内容について承知致しました。 遊びの部分を作るうえで、ただ単に余裕を持たせる以外に検討する際の要素があるのですね。 その点に関してもうすこし調べたりして、またその点で質問があればまた質問を新たに起票させて頂こうと思います。 matobaa様、度重なるご回答ありがとうございました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/30 00:57
2018/07/30 13:23
2018/07/31 00:53
2018/08/01 03:54
2018/08/02 01:52