Created
October 11, 2012 19:50
-
-
Save buzztaiki/3875057 to your computer and use it in GitHub Desktop.
コンカレントGCのときのヒープサイズ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require 'open3' | |
| require 'terminal-table' | |
| def run_java(*args, &block) | |
| o, e, s = Open3.capture3('java', *args) | |
| o.each_line(&block) | |
| end | |
| def totals(*args) | |
| java_args = ['-server', '-XX:+PrintGCDetails', args, '-version'].flatten | |
| run_java(*java_args) | |
| .select {|line| /\btotal\b/ =~ line} | |
| .map {|line| line.chomp.sub(/,.*/, '').sub('total', ',').split(/,/).map(&:strip)} | |
| end | |
| def heaps(totals) | |
| new, old = totals.map {|(n, v)| v[0..-2].to_i} | |
| ratio = old.to_f/new | |
| [new, old, ratio] | |
| end | |
| def show_heaps(*data) | |
| table = Terminal::Table.new( | |
| :headings => ['Options', 'New', 'Old', 'New/Old'], | |
| :rows => data.map {|d| [d.join(' ')] + heaps(totals(d))}) | |
| puts table | |
| end | |
| show_heaps( | |
| %w[-Xms1000M -Xmx1000M], | |
| %w[-Xms1000M -Xmx1000M -XX:+UseConcMarkSweepGC], | |
| %w[-Xms4000M -Xmx4000M], | |
| %w[-Xms4000M -Xmx4000M -XX:+UseConcMarkSweepGC], | |
| %w[-Xms4000M -Xmx4000M -XX:NewRatio=2], | |
| %w[-Xms4000M -Xmx4000M -XX:NewRatio=2 -XX:+UseConcMarkSweepGC], | |
| ) | |
| show_heaps( | |
| *(10..40).step(5).map{|n| | |
| %W[-Xms#{n}00M -Xmx#{n}00M -XX:+UseConcMarkSweepGC] | |
| }) |
Author
Author
コンカレントGCで、NewRatioを指定しない場合、MaxNewSizeが暗黙で設定される。これのせいでNew領域に制限がついてる。NewRatioを明示するとMaxNewSizeの暗黙の指定がなくなる。これは仕様なのかバグなのか。どっちなんだろう。
コンカレントGC指定なし、NewRatio指定なし:
% java -server -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -Xms4000M -Xmx4000M -version 2> /dev/null | head -n 1
-XX:InitialHeapSize=4194304000 -XX:MaxHeapSize=4194304000 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseParallelGC
コンカレントGC指定あり、NewRatio指定なし:
% java -server -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -Xms4000M -Xmx4000M -XX:+UseConcMarkSweepGC -version 2> /dev/null | head -n 1
-XX:InitialHeapSize=4194304000 -XX:MaxHeapSize=4194304000 -XX:MaxNewSize=697933824 -XX:MaxTenuringThreshold=6 -XX:NewSize=697933824 -XX:OldPLABSize=16 -XX:OldSize=1395867648 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
コンカレントGC指定あり、NewRatio指定あり:
% java -server -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -Xms4000M -Xmx4000M -XX:+UseConcMarkSweepGC -XX:NewRatio=2 -version 2> /dev/null | head -n 1
-XX:InitialHeapSize=4194304000 -XX:MaxHeapSize=4194304000 -XX:MaxTenuringThreshold=6 -XX:NewRatio=2 -XX:OldPLABSize=16 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
コンカレントGCだとNew領域に制限があるっぽく見える: