知っておくべきすべてのJVMパラメータは次のとおりです

知っておくべきすべてのJVMパラメータは次のとおりです

[[439460]]

この記事はWeChatの公開アカウント「Java Technology Guide」から転載したもので、著者はZhibeijunです。この記事を転載する場合は、Java Technology Guide の公開アカウントにご連絡ください。

みなさんこんにちは、私はZhibeijunです。

前回の記事では、次のようなさまざまなガベージコレクターを紹介しました。

新世代のガベージ コレクター: Serial、ParNew、Parallel Scavenge。

旧世代のガベージ コレクター: Serial Old (MSC)、Parallel Old、CMS。

全体山札: G1

最後に、最も強力なガベージ コレクターである ZGC が導入されました。

この記事では、これらのガベージ コレクターの JVM パラメータ構成について紹介します。

JVM パラメータは多数あります。実際、ほとんどの状況に対応するために、デフォルトの JVM パラメータを変更せずに直接使用できます。ただし、限られたハードウェア リソースの下で展開されたシステムの最大限の動作効率を実現したい場合は、関連する JVM パラメータを設定することが不可欠です。以下では、これらの JVM パラメータについて詳しく紹介します。 JVM パラメータは、主に次の 3 種類に分けられます (記述形式によって区別できます)。

1. 標準パラメータ

標準パラメータには、その名前が示すように、非常に安定しており、基本的に JVM バージョンの変更によって変化しない関数と出力結果が含まれます。

-help コマンドを使用してすべての標準パラメータを取得できます。

これらのコマンドの詳細な説明については、公式 Web サイトを参照してください: https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html

-help も、より一般的に使用される -version と同様に標準パラメータです。

①、-バージョン

Java バージョン情報を表示します。

2. Xパラメータ

上記の標準化されたパラメータに対応する、非標準化されたパラメータです。将来の JVM バージョンで変更される可能性があることを示しますが、-X で始まるパラメータは比較的変更されません。

Java -X コマンドを使用して、すべての -X パラメータを取得できます。

これらのパラメータの紹介については、上の写真の中国語の説明が非常に明確なので、ここではあまり詳しく説明しません。

3. XXパラメータ

これは、日常の開発で遭遇する最も一般的なパラメータ タイプです。これも標準化されていないパラメータであり、比較的不安定です。 JVM バージョンの変更により変更される可能性があります。主に JVM のチューニングとデバッグに使用されます。

注: このパラメータは、JVM チューニングの以降の紹介で最も詳しく説明するパラメータです。

このパラメータの記述形式は、次の 2 つのカテゴリに分かれます。

①.ブール型の形式: -XX:[+-] は、名前属性を有効または無効にすることを意味します。

例: -XX:+UseG1GC (G1 ガベージ コレクターを有効にすることを示します)

②.キー値タイプの形式: -XX:= は、名前の属性値が値であることを意味します。

例: -XX:MaxGCPauseMillis=500 (GC の最大一時停止時間が 500 ミリ秒に設定されていることを示します)

4. パラメータの詳細な説明

1. ユーザーまたは現在の仮想マシンによって設定されたパラメータを印刷する

  1. -XX:+PrintCommandLineFlags

例えば:

2. 最大および最小ヒープメモリ設定

-Xms512M: 初期ヒープメモリ値を512Mに設定します

-Xmx1024M: 最大ヒープメモリサイズを1024Mに設定します

ここで、ms はメモリ開始の略語、mx はメモリ最大 (memory max) の略語で、それぞれ最小ヒープ容量と最大ヒープ容量を表します。しかし、これは -X パラメータではなく、実際には -XX パラメータであり、次のパラメータと同等です。

-XX:初期ヒープサイズ

-XX:最大ヒープサイズ

通常の状況では、サーバー プロジェクトの実行中はヒープ スペースが縮小および拡大し続けるため、必然的にシステムに不必要な負荷がかかります。したがって、実稼働環境では、ヒープ サイズを調整するときに GC に不必要な負荷がかからないように、JVM の Xms と Xmx を同じに設定する必要があります。

3. 異常なスナップショットをダンプし、ファイルとしてエクスポートする

-XX:+メモリ不足エラー時のヒープダンプ

-XX:ヒープダンプパス

ヒープ メモリの OOM の確率は、すべてのメモリ枯渇例外の中で最も高くなります。エラーが発生したときのヒープ情報は、問題の解決に非常に役立ちます。したがって、JVM にこのパラメータ (-XX:+HeapDumpOnOutOfMemoryError) を設定して、OOM 例外が発生したときに JVM がヒープ情報を出力できるようにし、(-XX:+HeapDumpPath) パラメータを通じてヒープ メモリ オーバーフロー スナップショット出力のファイル アドレスを設定します。これは、数か月間隔で発生する OOM 例外の場合に特に重要です。

通常、次の 2 つのパラメータは一緒に使用されます。

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./

4. OOMを送信した後、スクリプトを実行する

-XX:メモリ不足エラー

たとえば、次のように設定します。

-XX:OnOutOfMemoryError="C:\Program Files\Java\jdk1.8.0_152\bin\jconsole.exe"

OOM が発生した後に jconsole.exe プログラムが実行されることを示します。 jconsole.exe のパス Program Files にはスペースが含まれているため、ここで "" を追加する必要はありません。

このパラメータを使用すると、システム OOM 後のスクリプトをカスタマイズして、電子メール警告情報の送信やシステムの再起動などに使用できます。

5. GC情報を印刷する

①、GC簡易情報を印刷

-詳細:gc

-XX:+プリントGC

1 つは標準パラメータであり、もう 1 つは -XX パラメータです。どちらも詳細な gc 情報を出力します。通常、次の情報が印刷されます。

たとえば、最初の行は、GCコレクション前のメモリが12195K、コレクション後のメモリが1088K、合計メモリが125951Kであることを示しています。

②、GC詳細情報を印刷する

-XX:+GC詳細を印刷

-XX:+GCタイムスタンプを印刷

6. GCログ出力をファイルとして指定する

-Xloggc:./gc.log

このパラメータは、gc ログをファイル形式で出力するために使用され、ログを表示して問題を見つけやすくなります。

7. 永続世代のサイズを設定する

-XX:最大パーマサイズ=1280m

JDK1.7 およびそれ以前のバージョンでは、Hotspot のみが永続世代と呼ばれる Perm 領域を持ちますが、これは起動時にサイズが固定されており、調整が困難です。

場合によっては、動的にロードされるクラスが多すぎると、Perm 領域で OOM が発生しやすくなることがあります。例えば、実際の Web プロジェクトでは、機能ポイントが多数あるため、動作中に多くのクラスを動的にロードする必要があり、次のようなエラーが発生します。

「スレッド 'dubbo client xxconnect' で例外が発生しました java.lang.OutOfMemoryError:PermGenspace」

この問題を解決するには、プロジェクトを開始するときに操作パラメータ -XX:MaxPermSize を設定する必要があります。

注: JDK 1.8 以降のバージョンでは、永続世代の代わりにメタスペースが使用されます。 JDK1.8 以降のバージョンでは、パラメータ -XX:MaxPermSize を設定すると、JVM の起動時にエラーは報告されませんが、次のプロンプトが表示されます。

Java Hotspot 64 ビット サーバー VM 警告: オプション MaxPermSize=1280m を無視します: サポートは 8.0 で削除されました

8. ガベージコレクターの共通パラメータ

<<:  クラウドストレージのスケーラビリティの利点と限界

>>:  クラウドネイティブのセキュリティツールを使用する場合と使用しない場合

推薦する

Freeweb - 30 ユーロ/年払い/2 GB メモリ/50 GB ハードディスク/10 TB トラフィック/500 M ポート

freeweb.ie は 2008 年 4 月に設立されました。現在のサーバーは OVH のフランス...

毛偉:新しいトップレベルドメイン名の申請が開始され、自分でドメイン名を作成する時代が始まるかもしれない

この日は、第43回ICANN会議が開催された。世界的に新しいトップレベルドメインが開設されたことと重...

dabuu-1.83ドル/月/cpanelホスティング/SSD/無料専用IP/無料ドメイン名1つ

dabuu.com は 2009 年に設立されたホスティング プロバイダーです。多くの事業を展開して...

dominionhosting-$4.95/Xen/2IP/無料DAパネル/512MBメモリ

dominionhosting がプロモーションを行っています。この製品は数年前のもので、以前はこの...

3Wコーヒーで学べること: 広告費ゼロで強力なブランドを構築する方法

みなさんこんにちは。私は徐丹丹です。今日は口コミによるマーケティング手法をいくつか紹介します。3W ...

中国オートレンタルはウォーバーグ・ピンカスから2億ドルの投資を受けるが、これはIPOの資金調達額を上回る額である。

7月9日の午後、CAR社とウォーバーグ・ピンカスは、ウォーバーグ・ピンカスがCAR社に2億ドルの株式...

セカンドレベルドメイン名を使用してウェブサイトを構築する場合、どのような点に注意する必要がありますか?

新しいウェブサイトの場合、最初から検索エンジンの支持を得ることは通常不可能です。特に、立ち上げたばか...

12306との協議その3:大きな抜け穴により数億人のユーザーの情報漏洩につながる可能性

9月28日夜のニュースで、昨夜12306にさらに深刻な問題が発見されたことがインターネット上で明らか...

ウェブサイト最適化構築テクニックの3段階

現在、ウェブサイトの最適化は基本的に Baidu 最適化、つまり Baidu 検索エンジンを中心とし...

MySQL分散アーキテクチャの拡張と縮小の予備設計

MySQL 分散アーキテクチャのスケールアップとスケールダウンは非常に興味深いトピックです。厳密に言...

草の根の 2B ビジネス経験: 誠実さ、スキル、そして低 B スタイル

ネットには2B(ToB)に関する記事が溢れている。Dark Horse Competitionでは「...

インターフェース監視用の Prometheus エクスポーターを開発する

ブラックボックス監視については皆さんもよくご存知だと思います。ブラックボックスの監視には black...

外国貿易ウェブサイトのSEOに影響を与える要因の分析

ウェブサイトの構築を準備する際に、あなたのビジネスや会社にとって最も重要な要素は何でしょうか? それ...

ウェブサイト SEO 最適化の専門性に関する Baidu の内部評価原則

私は再び SEO に関する記事を書き始めましたが、SEO は以前と同じくらいシンプルであることがわか...