序文
エンジニアとして、プロジェクトの調整の問題は、問題に精通して取得する必要があります。
SpringBootプロジェクトでは、主にチューニングプロファイルパラメータとJVMの方法による。
設定ファイルを変更します。
コンフィギュレーション・ファイルapplication.propertiesを修正について。
SpringBoot詳細なプロジェクトプロファイルは、ドキュメントを変更します
https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#common-application-properties
もっと重要なのは、次のとおりです。
server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time.
server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header.
server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content.
server.tomcat.max-threads=0 # Maximum number of worker threads.
server.tomcat.min-spare-threads=0 # Minimum number of worker threads.
JVMのチューニング
https://docs.oracle.com/middleware/11119/wls/PERFM/jvm_tuning.htm#i1146060
我々は行くと見ることができます興味を持っています。
JVMのチューニングの戦闘
JVMパラメータが用意されていません
私は今のプロジェクトは、デフォルトでは、それがどのJVMパラメータを設定しませんしています。
今、私は見始めます。
スタック割り当てを見てください:
明らかに、デフォルトの最大ヒープメモリは8 G.を割り当てられます まあ、明らかに不合理。
「」私たちはJVMの下のパラメータを設定してみましょう
例えば、JVMこのような大きなセグメントパラメータを設定します。
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-Xms1024m -Xmx1024m -Xmn256m
-Xss256k -XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC
一つの方法:
プロジェクトの実行を開始するために、IDEAなどの開発ツールを使用している場合、それはあまりにも多くのデバッグJDKに簡単ですので。
唯一の可能VMオプションにパラメータ値を設定する必要があります。
セットアップし、私のGCログとスタック割り当てはOKでした。
GCログ:
スタック割り当て:
第二の方法:
セットアップを実行するスクリプトまたはコマンドラインを使用したときに、プロジェクトの後、起動時の展開に適しています。
プロジェクトパッケージへの最初のプロジェクトのパスの下で:
古いアイテムをクリーンアップするには
mvn clean
新しいプロジェクトをパッケージング:
mvn package -Dmaven.test.skip=true
パス実行可能Jarのパッケージパッケージが完了した後:
操作の実行スタートアップ設定JVMパラメータ。
$ java -jar -XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-Xms1024m -Xmx1024m -Xmn256m -Xss256k
-XX:SurvivorRatio=8
-XX:+UseConcMarkSweepGC newframe-1.0.0.jar
今回は、あなたはそれがOKにすでにあるでしょう、モニターを見てください。
スタックは、開始時間に応じて、JVMパラメータセットを開始することです。
これらの設定の意味が何であるかについてのJVM引数は、第2工程では与えられたチューニングオラクルの公式ドキュメントを参照してください。
単純にこちらをクリックしてください:
-XX:MetaspaceSize = 128メートル(メタスペースのデフォルトサイズ)
-XX:MaxMetaspaceSize = 128メートル(メタスペースの最大サイズ)
-Xms1024m(最大ヒープサイズ)
-Xmx1024m(デフォルトのヒープサイズ)
-Xmn256m(新生代サイズ)
-Xss256k(スタックサイズの最大深さ)
-XX:SurvivorRatio = 8(新世代の分配比8:2)
-XX:+ UseConcMarkSweepGCを(ここではCMSコレクタを使用し、ガベージコレクタを指定します)
-XX:+ PrintGCDetails(詳細なログGCを印刷)
知識ポイント:
JDK8後-XX:PermSizeをと-XX:MaxPermGenは-XXで置き換え、除去:MetaspaceSize = 128メートル(素子空間のデフォルトのサイズ)-XX:MaxMetaspaceSize = 128メートル(空間元の最大サイズ)
8つの開始は地域メタスペースと呼ばれているローカライズされたヒープ(ネイティブヒープ)、中国の元の名前空間にJDKクラスにメタデータ。
ローカライズされたメモリには何が良いのですか?最も直接的な表現でjava.lang.OutOfMemoryErrorです:PermGenスペースの問題が存在しなくなり、メタデータ割り当てられたデフォルトのクラスは、ローカルメモリのサイズ、によってのみ制限されるため、ローカルメモリの残りの数、どのようにすることができます理論的にはメタスペース(一見も程度のオペレーティングシステムの仮想メモリの容量は?ここでは明確ではない)、これは十分なスペースの問題を解決します。
メタスペース領域のサイズを指定するには、MaxMetaspaceSizeパラメータ:使用-XX:我々はメタスペースのサイズを制限する必要があるので、しかし、聞かせてメタスペースとなって無限は、明らかに非現実的です。実行時に動的にサイズに応じMaxMetaspaceSize JVMのデフォルト設定。
よりエキサイティングな記事が関係があります。公共マイクロチャネル番号、Javaプログラマが集まります。