JVMメモリ使用量はどのように計算されますか?

JVMメモリ使用量はどのように計算されますか?

Elasticsearchクラスタを調整していますが、一貫していないメモリ使用量が見つかりました。free私のインスタンスで " "を実行する:

free
              total        used        free      shared  buff/cache   available
Mem:       30881324    17072320      238216       49736    13570788    13313528
Swap:             0           0           0

30GB我々はそれをマシンで見る。

ESは、利用可能なメモリの50%(またはOOPのために最大30 GB)を使用するように調整されました。ここで確認でき、-Xmsフラグ-Xmxは次のように設定されています15078m

/bin/java -Xms15078m -Xmx15078m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -Des.distribution.flavor=default -Des.distribution.type=rpm -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet

しかし、「トップ」を実行すると、別の話が表示されます。

%MEMに配置すると、複数回59%表示されます(nagios警告トリガー)。85%

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
24366 elastic+  20   0   54.9g  17.5g   1.6g S 267.7 59.3   1849:57 java

ベストアンサー1

ヒープサイズを15 GBに制限しましたが、JVMはそれ以上、つまりスタックとベースメモリを使用し、その一部はJVM(メタスペース)で管理されています。

このpmap -x <pid>コマンドは、追加の2.5 GBが使用されている場所(スタック、ヒープ)を識別するのに役立ちます。

このps -o nlwp <pid>コマンドはスレッド数を提供します。あなたの場合、各スレッドは1MBのメモリを消費するため、1000個のスレッドは1GBを使用します。

このjstat -gc <pid>コマンドは、MU列の下に使用されているメタスペースのサイズを表示します。

メタスペースでメモリを使用している場合は、次のオプションを使用してメモリを制限できます。

-XX:MaxMetaspaceSize=1g

おすすめ記事