1. 程式人生 > >Java8用jmap輸出jvm引數

Java8用jmap輸出jvm引數

jmap輸出

[[email protected] ~]$ /opt/java/jdk1.8.0_101/bin/jmap -heap 11368   
Attaching to process ID 11368, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.101-b13

using thread-local object allocation.
Parallel GC with 2 thread(s)

Heap Configuration:
   MinHeapFreeRatio         
= 0 MaxHeapFreeRatio = 100 MaxHeapSize = 2684354560 (2560.0MB) NewSize = 1073741824 (1024.0MB) MaxNewSize = 1073741824 (1024.0MB) OldSize = 1610612736 (1536.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize
= 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 852492288 (813.0MB) used = 420427144 (400.95056915283203MB) free = 432065144 (412
.04943084716797MB) 49.31741317993014% used From Space: capacity = 113770496 (108.5MB) used = 2299712 (2.19317626953125MB) free = 111470784 (106.30682373046875MB) 2.021360617079493% used To Space: capacity = 107479040 (102.5MB) used = 0 (0.0MB) free = 107479040 (102.5MB) 0.0% used PS Old Generation capacity = 1610612736 (1536.0MB) used = 50883368 (48.526161193847656MB) free = 1559729368 (1487.4738388061523MB) 3.1592552860577903% used 27595 interned Strings occupying 3138384 bytes.

MaxHeapFreeRatio: GC後如果發現空閒堆記憶體佔到整個預估堆記憶體的N%(百分比),則收縮堆記憶體的預估最大值, 預估堆記憶體是堆大小動態調控的重要選項之一. 堆記憶體預估最大值一定小於或等於固定最大值(-Xmx指定的數值). 前者會根據使用情況動態調大或縮小, 以提高GC回收的效率
MinHeapFreeRatio: GC後如果發現空閒堆記憶體佔到整個預估堆記憶體的N%(百分比), 則放大堆記憶體的預估最大值

MaxHeapSize: 即-Xmx, 堆記憶體大小的上限
InitialHeapSize: 即-Xms, 堆記憶體大小的初始值

NewSize: 新生代預估堆記憶體佔用的預設值
MaxNewSize: 新生代佔整個堆記憶體的最大值

OldSize: 老年代的預設大小, default size of the tenured generation
NewRatio: 老年代對比新生代的空間大小, 比如2代表老年代空間是新生代的兩倍大小. The ratio of old generation to young generation.

SurvivorRatio: Eden/Survivor的值. 這個值的說明, 很多網上轉載的都是錯的. 8表示Survivor:Eden=1:8, 因為survivor區有2個, 所以Eden的佔比為8/10. Ratio of eden/survivor space size. -XX:SurvivorRatio=6 sets the ratio between each survivor space and eden to be 1:6, each survivor space will be one eighth of the young generation. 

MetaspaceSize: 分配給類元資料空間的初始大小(Oracle邏輯儲存上的初始高水位,the initial high-water-mark ). 此值為估計值. MetaspaceSize設定得過大會延長垃圾回收時間. 垃圾回收過後, 引起下一次垃圾回收的類元資料空間的大小可能會變大
MaxMetaspaceSize: 是分配給類元資料空間的最大值, 超過此值就會觸發Full GC. 此值僅受限於系統記憶體的大小, JVM會動態地改變此值

CompressedClassSpaceSize: 類指標壓縮空間大小, 預設為1G

G1HeapRegionSize: G1區塊的大小, 取值為1M至32M. 其取值是要根據最小Heap大小劃分出2048個區塊. With G1 the Java heap is subdivided into uniformly sized regions. This sets the size of the individual sub-divisions. The default value of this parameter is determined ergonomically based upon heap size. The minimum value is 1Mb and the maximum value is 32Mb. Sets the size of a G1 region. The value will be a power of two and can range from 1MB to 32MB. The goal is to have around 2048 regions based on the minimum Java heap size.

指標壓縮1. 64位平臺上預設開啟
  1)使用-XX:+UseCompressedOops壓縮物件指標
    "oops"指的是普通物件指標("ordinary" object pointers)。
    Java堆中物件指標會被壓縮成32位。
    使用堆基地址(如果堆在低26G記憶體中的話,基地址為0)
  2)使用-XX:+UseCompressedClassPointers選項來壓縮類指標
    物件中指向類元資料的指標會被壓縮成32位
    類指標壓縮空間會有一個基地址

2. 元空間和類指標壓縮空間的區別
  1)類指標壓縮空間只包含類的元資料,比如InstanceKlass, ArrayKlass
    僅當打開了UseCompressedClassPointers選項才生效
    為了提高效能,Java中的虛方法表也存放到這裡
    這裡到底存放哪些元資料的型別,目前仍在減少
  2)元空間包含類的其它比較大的元資料,比如方法,位元組碼,常量池等。

[[email protected] ~]$ /opt/java/jdk1.8.0_101/bin/jstat -gcutil 11368   
  S0     S1     E      O      M     CCS       YGC   YGCT     FGC    FGCT     GCT   
  2.02   0.00  49.32   3.16  92.13  88.17     24    1.220     3    0.637    1.857

S0: Survivor 0區的空間使用率 Survivor space 0 utilization as a percentage of the space's current capacity.
S1: Survivor 1區的空間使用率 Survivor space 1 utilization as a percentage of the space's current capacity.
E: Eden區的空間使用率 Eden space utilization as a percentage of the space's current capacity.
O: 老年代的空間使用率 Old space utilization as a percentage of the space's current capacity.
M: 元資料的空間使用率 Metaspace utilization as a percentage of the space's current capacity.
CCS: 類指標壓縮空間使用率 Compressed class space utilization as a percentage.
YGC: 新生代GC次數 Number of young generation GC events.
YGCT: 新生代GC總時長 Young generation garbage collection time.
FGC: Full GC次數 Number of full GC events.
FGCT: Full GC總時長 Full garbage collection time.
GCT: 總共的GC時長 Total garbage collection time.

記錄GC日誌

加入引數

-verbose:gc -Xloggc:$CATALINA_BASE/logs/gc.log XX:+PrintGCTimeStamps -XX:+PrintGCDetails

例如

export JAVA_HOME=/opt/java/jdk1.8.0_101
export CATALINA_HOME=/opt/tomcat/apache-tomcat-8.0.36-redis
export CATALINA_BASE=/home/tomcat/tomcat8_jdk8
export JAVA_OPTS="-server -Xms1280m -Xmx1280m -XX:MaxNewSize=896m -Djava.awt.hea
dless=true -verbose:gc -Xloggc:$CATALINA_BASE/logs/gc.log -XX:+PrintGCTimeStamps
 -XX:+PrintGCDetails"
cd $CATALINA_HOME/bin
./catalina.sh start

如果jvm程序不明原因退出, 可以檢視syslog, 位置是 /var/log/messages


-XX:MaxTenuringThreshold     垃圾最大年齡, 如果設定為0的話,則年輕代物件不經過Survivor區,直接進入年老代. 對於年老代比較多的應用,可以提高效率.如果將此值設定為一個較大值,則年輕代物件會在Survivor區進行多次複製,這樣可以增加物件再年輕代的存活 時間,增加在年輕代即被回收的概率. 該引數只有在序列GC時才有效.

jdk記憶體實際是jvm記憶體,jvm有一個執行時資料區,其實就是對這一部分的大小分配。

執行時資料區通常包括這幾個部分:程式計數器(Program Counter Register)、Java棧(VM Stack)、本地方法棧(Native Method Stack)、方法區(Method Area)、堆(Heap)

  • Xss:每個執行緒的stack大小(棧)
  • Xmx:JAVA HEAP的最大值、預設為實體記憶體的1/4
  • Xms:JAVA HEAP的初始值,server端最好Xms與Xmx一樣
  • Xmn:JAVA HEAP young區的大小
  • XX:PermSize:設定記憶體的永久儲存區域
  • XX:MaxPermSize:設定最大記憶體的永久儲存區域

在JDK1.8中,取消了PermGen,取而代之的是Metaspace,所以PermSize和MaxPermSize引數失效,取而代之的是

 -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m
  • 1

修改JDK記憶體

linux下:在tomcat的bin目錄下編輯catalina.sh

cygwin=false上面加入

JAVA_OPTS="-Xms1024m -Xmx2048m -Xss1024K  -XX:MetaspaceSize=512m   
-XX:MaxMetaspaceSize1024m"

相關推薦

Java8jmap輸出jvm引數

jmap輸出[[email protected] ~]$ /opt/java/jdk1.8.0_101/bin/jmap -heap 11368 Attaching to process ID 11368, please wait... Debugger att

JVM引數jmap列印堆快照,jstack實戰死鎖

1 jinfo指令:如何執行時檢視引數值          jinfo -flag MaxHeapSize 23789(檢視最大堆:23789即執行緒id)     jinfo

Java8 jvm引數簡介

一、用jmap命令輸出 二、解析 MaxHeapFreeRatio: GC後如果發現空閒堆記憶體佔到整個預估堆記憶體的N%(百分比),則收縮堆記憶體的預估最大值, 預估堆記憶體是堆大小動態調控

retrofit工具增加http調日誌輸出

client 輸出日誌 查看 默認 cep efault 日常 bst convert Retrofit 是一個很好用的http調用組件。內置的其實也是okhttp。把okhttp封裝了一下,讓日常的業務交互對http調用的感知變小。 一個http調用只需要一行代碼就可以了

Mybatislog4j輸出日誌,輸出sql到控制臺

信息 配置 style rac sage pre SQ back rop log4jar包+log4j.properties百度雲下載地址永久有效: https://pan.baidu.com/s/15WZ-lcBPgFa-a6lkTVVvYw 1 導入jar包(直接復制j

設定Eclipse 啟動時到的 JVM

由於系統環境變數只能指向一個JDK / JRE   ,因此當 eclipse 在安裝有多個不同版本JDK / JRE 的系統中執行時,可以 配置 eclipse 用指定的 JDK / JRE 執行。 修改D:\Program Files\eclipse\eclipse

java8學習:通過行為引數化傳遞程式碼

如下一段程式碼請看 @Test public void test() throws Exception { List<Apple> list = new ArrayList<>(); for (Apple apple : list) { if (apple.getWeight(

JAVA JVM引數調優、以及回收器

[轉]JVM系列三:JVM引數設定、分析 不管是YGC還是Full GC,GC過程中都會對導致程式執行中中斷,正確的選擇不同的GC策略,調整JVM、GC的引數,可以極大的減少由於GC工作,而導致的程式執行中斷方面的問題,進而適當的提高Java程式的工作效率。但是調整GC是以個極為複雜的過程,由於

C++ cout輸出小數點後位數的方法

現在有一個數據,例如為3.1415926,我們想要用cout輸出小數點後固定的位數 #include<iomanip> 首先引入標頭檔案,輸入輸出流 其次,在輸出時,加入這兩句 setiosflags(ios::fixed)<< setprecisi

spring AOP的@Around輸出請求引數和返回引數

spring 的AOP是通過cglib動態代理和jdk的動態代理實現的。 先把我的列印日誌程式碼貼出來 package com.zhd.exploit.api.config; import java.util.HashMap; import java.util.Map; imp

C#輸出9*9乘法表

採用VS 2017程式設計  Console.Write()輸出的是string型別,整型 加上一個字串,整行語句會自動變成字串型別,和Java一樣 考慮到乘法表是從 每一行的第一個因數從1遞增到9,第二個因素從1遞增到第一個因數,採用雙迴圈即可完成   usin

指標輸出結構體陣列【轉】

  (轉自:https://wenku.baidu.com/view/6511f01477c66137ee06eff9aef8941ea76e4bac.html) #include <stdio.h>  #include <string.h> #includ

JVM引數預設值列表

[[email protected] ~]$ java -XX:+PrintFlagsFinal [Global flags] uintx AdaptiveSizeDecrementScaleFactor = 4

[譯] Flask 輸出視訊流

原文地址:Video Streaming with Flask 原文作者:Miguel Grinberg 譯文出自:掘金翻譯計劃 本文永久連結:github.com/xitu/gold-m… 譯者:BriFuture 校對者:Mcskiller, Park-ma

如何在maven環境中設定JVM引數

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JAVA——JVM引數設定規則以及引數含義

JVM引數設定規則: -XX:+<option> 啟用option,例如:-XX:+PrintGCDetails啟動列印GC資訊的選項,其中+號表示true,開啟的意思-XX:-<option> 不啟用option,例如:-XX:-PrintGCDetails關閉啟動列印GC資訊的選

關鍵業務系統的JVM引數推薦(2018仲夏版)

前言1,資料 1. 學習開源專案的啟動指令碼是個不錯的主意,比如ElasticSearch家的,Cassandra家的, 附送一篇解釋它的文章。 2. VJTools的 jvm-options.sh,伸手黨們最愛,根據自己需要稍微定製一下就行。 3. JVM調優的"標

JVM引數學習筆記

JVM調優主要就是對垃圾回收器的調優 四種垃圾回收器 序列 -XX:+UseSerialGC 並行 -XX:+UseParallelGC -XX:+UseParalledlOldGC 併發(CMS) -XX:+UseParNewGC -XX:+UseConcM

JAVA jvm引數設定

1.設定列印gc日誌 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:filename 2.設定垃圾收集器 -XX:+UseSerialGC:設定序列收集器 -XX:+UseParallelGC:

echo不能輸出陣列

輸出陣列的種方式: function xiu_fetch_all($sql) { $conn = mysqli_connect(XIU_DB_HOST, XIU_DB_USER, XIU_DB_PASS, XIU_DB_NAME); if (!$conn) { exit('連線