JVM參數之ParallelGCThreads


通過命令查看參數:java -XX:+PrintFlagsFinal –version | grep 參數關鍵字,來查看當前參數是否被使用

1、查看線上運行的jvm的gc線程數:
      java -XX:+PrintFlagsFinal -version | grep ParallelGCThreads

      

 

2、對於並行gc收集器:

      2.1、比如ps的時候:
              -XX:ParallelGCThreads={value} 這個參數是指定並行 GC 線程的數量,一般最好和 CPU 核心數量相當。默認情況下,當 CPU 數量小於8, ParallelGCThreads 的值等於 CPU 數量,當 CPU 數量大於 8 時,則使用公式:ParallelGCThreads = 8 + ((N - 8) * 5/8) = 3 +((5*CPU)/ 8)同時這個參數只要是並行 GC 都可以使用,不只是 ParNew。

              由於GC操作會暫停所有的應用程序線程,JVM為了盡量縮短停頓時間就必須盡可能地利用更多的CPU資源。這意味着,默認情況下,JVM會在機器的每個CPU上運行一個線程,最多同時運行8個。一旦達到這個上限,JVM會調整算法,每超出5/8個CPU啟動一個新的線程。所以總的線程數就是(這里的N代表CPU的數目):ParallelGCThreads = 8 + ((N - 8) * 5/8)
              有時候使用這個算法估算出來的線程數目會偏大。如果應用程序使用一個較小的堆(譬如大小為1 GB)運行在一個八顆CPU的機器上,使用4個線程或者6個線程處理這個堆可能會更高效。在一個128顆CPU的機器上,啟動83個垃圾收集線程可能也太多了,除非系統使用的堆已經達到了最大上限。

      2.2、cms的時候:
              -XX:ParallelGCThreads 由於是並行處理器,當然也可以指定線程數。
              默認並發線程數是:(ParallelGCThreads + 3)/ 4)

 

附帶:

1、CPU總核數 = 物理CPU個數 * 每顆物理CPU的核數
2、總邏輯CPU數 = 物理CPU個數 * 每顆物理CPU的核數 * 超線程數

3、相關命令:

      3.1、查看CPU信息(型號)[root@AAA ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

              28  Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz 

     3.2、查看物理CPU個數 [root@AAA ~]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

              1

     3.3、查看每個物理CPU中core的個數(即核數) [root@AAA ~]# cat /proc/cpuinfo| grep "cpu cores"| uniq

              cpu cores : 14

    3.4、查看邏輯CPU的個數 [root@AAA ~]# cat /proc/cpuinfo| grep "processor"| wc -l

             12

 


免責聲明!

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



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