質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java ME

Java ME(Java Platform, Micro Edition)はリソースが制限されたデバイス(携帯電話、PDA、テレビなど)用につくられたJavaプラットフォームである。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2941閲覧

Javaスレッドの1日最大のメモリ使用量を調べる方法はありませんでしょうか?

umegon

総合スコア24

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java ME

Java ME(Java Platform, Micro Edition)はリソースが制限されたデバイス(携帯電話、PDA、テレビなど)用につくられたJavaプラットフォームである。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2018/07/27 09:50

こんにちは、質問を見て頂いてありがとうございます。

AP機で動いているJAVAプロセスで確保されているメモリの内、実際に使用・必要されたその日最大のメモリ量を調べれるような方法はないでしょうか?
できるだけ負荷をかけずに取得したいのですが、やはり難しいでしょうかね・・・。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JavaVMにverbosegcオプションをつけてgcログを吐かせればいいんじゃないかな。

投稿2018/07/27 12:01

matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umegon

2018/07/30 00:57

ご回答ありがとうございます。 verbosegcオプションについて検索致しました。 標準出力ですと [GC (Allocation Failure) 5345K->3960K(9728K), 0.0013894 secs] [Full GC (Allocation Failure) 3960K->2735K(9728K), 0.0036841 secs] このような感じにログが出てきて、左側が元々のメモリ使用量で その値の最大値をツール等で調べるということになりますでしょうか?
matobaa

2018/07/30 13:23

「実際に使用・必要されたその日最大のメモリ量」の定義にもよりますが、FullGC時の右側の数字を見ればよいかと思います。厳密ではないですが、だいたいの傾向はつかめるでしょう。
umegon

2018/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領域のメモリ量になってしまうということなのでしょうか? 幾度の質問となってしまい、申し訳ございません。 可能でしたら、ご教示頂けると嬉しいです。よろしくお願いいたします。
matobaa

2018/08/01 03:54

「最近JAVAに触れたばかり」とおっしゃっていますが、おおむね正しく理解できていらっしゃいますね。 GCとはゴミ掃除なわけですが、FullじゃないGCだとOld領域にはゴミが残ったままの量になります。FullGCであればOld領域のゴミも掃除したあとの量になってます。 ただ、この量ぴったりにXmxを設定してしまうと身動きが取れなくなってしまうので遊びが必要です。そこはもう、ゴミを散らかすことができるワークエリアをどれくらいとるか、GCにかかる時間をどこまで短くしたいか、といった方針を立てたうえで決めることになるでしょう。ゴミは無駄ですがキャッシュは性能に寄与するだとか、検討要素はほかにもあります。 メモリを拡大する時間を許容できるシステムなのであれば、とりあえず Xms < Xmx で起動しておいて、結果としてどこまで広がったのかを調べて、それをXmsに設定する、といった簡単なアプローチでもいいんじゃないのかなーと。
umegon

2018/08/02 01:52

ご回答ありがとうございます。Qiitaやブログなどに分かりやすくまとまっているので、そのようなところで基礎は調べさせていただいております。 記載した内容について承知致しました。 遊びの部分を作るうえで、ただ単に余裕を持たせる以外に検討する際の要素があるのですね。 その点に関してもうすこし調べたりして、またその点で質問があればまた質問を新たに起票させて頂こうと思います。 matobaa様、度重なるご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問