elasticsearch jvm優化


測試環境elasticsearch jvm 4G jdk1.8

[serveradm@test-log-server elasticsearch]$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
[serveradm@test-log-server elasticsearch]$ 

 

-Xms4g
-Xmx4g

 jmap -heap pid查看heap內存大小

[serveradm@test-log-server elasticsearch]$ jmap -heap 11516
Attaching to process ID 11516, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.212-b10

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 4294967296 (4096.0MB)
   NewSize                  = 348913664 (332.75MB)
   MaxNewSize               = 348913664 (332.75MB)
   OldSize                  = 3946053632 (3763.25MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 314048512 (299.5MB)
   used     = 275463512 (262.70247650146484MB)
   free     = 38585000 (36.797523498535156MB)
   87.7136816365492% used
Eden Space:
   capacity = 279183360 (266.25MB)
   used     = 245544536 (234.16951751708984MB)
   free     = 33638824 (32.080482482910156MB)
   87.95099249468163% used
From Space:
   capacity = 34865152 (33.25MB)
   used     = 29918976 (28.532958984375MB)
   free     = 4946176 (4.717041015625MB)
   85.81341047932331% used
To Space:
   capacity = 34865152 (33.25MB)
   used     = 0 (0.0MB)
   free     = 34865152 (33.25MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 3946053632 (3763.25MB)
   used     = 27565128 (26.28815460205078MB)
   free     = 3918488504 (3736.961845397949MB)
   0.6985492487092482% used
View Code

主要信息如下:

MaxHeapSize = 4294967296 (4096.0MB)
NewSize = 348913664 (332.75MB)
MaxNewSize = 348913664 (332.75MB)
OldSize = 3946053632 (3763.25MB)
NewRatio = 2

通過https://www.jianshu.com/p/832fc4d4cb53計算可得:

默認情況下和cpu核數有關:

64M * 4 * 13 / 10 = 332.8M

max_heap / (NewRatio+1) 的值為4096M / 3 = 1365M

符合文章所說的大小

所以,YoungGen 的大小在沒有設置的情況下是通過計算得出的,其大小可能與 NewRatio 的默認配置沒什么關系而與ParallelGCThreads 的配置有一定的關系。
那么既然 YoungGen 大小有不確定性,我們最好還是通過這些 -XX:NewSize、-XX:MaxNewSize 或者 -xmn 參數設置下

設置參數:
-Xms4g
-Xmx4g
-XX:NewRatio=4

 

[serveradm@test-log-server elasticsearch]$ jmap -heap 11885
Attaching to process ID 11885, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.212-b10

using parallel threads in the new generation.
using thread-local object allocation.
Concurrent Mark-Sweep GC

Heap Configuration:
   MinHeapFreeRatio         = 40
   MaxHeapFreeRatio         = 70
   MaxHeapSize              = 4294967296 (4096.0MB)
   NewSize                  = 858980352 (819.1875MB)
   MaxNewSize               = 858980352 (819.1875MB)
   OldSize                  = 3435986944 (3276.8125MB)
   NewRatio                 = 4
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
New Generation (Eden + 1 Survivor Space):
   capacity = 773128192 (737.3125MB)
   used     = 486640352 (464.0964050292969MB)
   free     = 286487840 (273.2160949707031MB)
   62.94432890115072% used
Eden Space:
   capacity = 687276032 (655.4375MB)
   used     = 413461664 (394.3077697753906MB)
   free     = 273814368 (261.1297302246094MB)
   60.15947665115142% used
From Space:
   capacity = 85852160 (81.875MB)
   used     = 73178688 (69.78863525390625MB)
   free     = 12673472 (12.08636474609375MB)
   85.23802779103053% used
To Space:
   capacity = 85852160 (81.875MB)
   used     = 0 (0.0MB)
   free     = 85852160 (81.875MB)
   0.0% used
concurrent mark-sweep generation:
   capacity = 3435986944 (3276.8125MB)
   used     = 25476440 (24.296226501464844MB)
   free     = 3410510504 (3252.516273498535MB)
   0.7414591619589112% used
View Code

此時heap信息如下:

MaxHeapSize = 4294967296 (4096.0MB)
NewSize = 858980352 (819.1875MB)
MaxNewSize = 858980352 (819.1875MB)
OldSize = 3435986944 (3276.8125MB)
NewRatio = 4

 

堆內存查看:

jstat -gc pid 默認單位k
[serveradm@test-log-server elasticsearch]$ jstat -gc 11885
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 
83840.0 83840.0 0.0 13404.3 671168.0 644823.4 3355456.0 250260.3 83012.0 76771.6 12156.0 10227.8 21 0.771 4 0.246 1.017
[serveradm@test-log-server elasticsearch]$
  • S0C:survivor0區總內存大小(Capacity)
  • S1C: survivor1區總內存大小
  • S0U: survivor0區當前內存大小(Used)
  • S1U: survivor1區當前內存大小
  • EC:Eden區總內存大小
  • EU:Eden區當前內存大小
  • OC:老年代總內存大小
  • OU:老年代當前內存大小
  • MC:meta data區總內存大小
  • MU:meta data區當前內存大小
所以:
NewSize=S0C+S1C+EC
 OldSize=OC
jvm常用參數:
-Xms :表示java虛擬機堆區內存初始內存分配的大小
-Xmx:表示java虛擬機堆區內存可被分配的最大上限
通常會將-Xms 與-Xmx兩個參數的配置相同的值,其目的是為了能夠在java垃圾回收機制清理完堆區后不需要重新分隔計算堆區的大小而浪費資源
-XX:newSize:表示新生代初始內存的大小,應該小於-Xms的值
-XX:MaxnewSize:表示新生代可被分配的內存的最大上限;當然這個值應該小於-Xmx的值;
-Xmn:至於這個參數則是對 -XX:newSize、-XX:MaxnewSize兩個參數的同時配置,也就是說如果通過-Xmn來配置新生代的內存大小,那么-XX:newSize = -XX:MaxnewSize = -Xmn
java虛擬機對非堆區內存配置的兩個參數:
-XX:PermSize:表示非堆區初始內存分配大小(方法區)
-XX:MaxPermSize:表示對非堆區分配的內存的最大上限(方法區)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM