Last active
March 23, 2022 11:18
-
-
Save eregon/93523d087c283ac88d13a75845e5785e to your computer and use it in GitHub Desktop.
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
def Process.rss | |
Integer(`ps -o rss= -p #{Process.pid}`) * 1024 | |
end | |
def mb(bytes) | |
return '?' if bytes == nil or bytes < 0 | |
mb = bytes / 1024.0 / 1024.0 | |
"#{mb.to_i} MB" | |
end | |
def status | |
stat = GC.stat | |
puts "heap: #{mb stat[:used]} used, #{mb stat[:committed]} committed, #{mb stat[:max]} max, RSS: #{mb Process.rss}, allocated: #{mb $allocated}" | |
end | |
def allocate(mb) | |
bytes = mb * 1024 * 1024 | |
int_elements = RUBY_ENGINE == "truffleruby" ? bytes / 4 : bytes / 8 | |
LEAK << Array.new(int_elements, 0) | |
$allocated += bytes | |
end | |
puts RUBY_DESCRIPTION | |
puts `free -m` | |
$allocated = 0 | |
LEAK = [] | |
status | |
loop do | |
allocate(1024) | |
status | |
end |
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
Ran on a system with 32GB RAM, on Linux, 8GB swap, with systemd-oomd | |
Summary: | |
* CRuby uses all RAM, starts using swap, until it's killed by the system OOM (no maximum heap by default) | |
* TruffleRuby Native uses a max heap of 80% of the RAM by default (25.6GB here), with `--vm.Xmx32g` uses all RAM. | |
* TruffleRuby JVM uses a max heap of 25% of the RAM by default (8GB here), with `--vm.Xmx32g` uses all RAM. | |
CRuby 3.0.3: | |
$ ruby use_memory.rb | |
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-linux] | |
total used free shared buff/cache available | |
Mem: 32102 1550 30138 1 413 30155 | |
Swap: 8191 1682 6509 | |
heap: ? used, ? committed, ? max, RSS: 13 MB, allocated: 0 MB | |
heap: ? used, ? committed, ? max, RSS: 1037 MB, allocated: 1024 MB | |
heap: ? used, ? committed, ? max, RSS: 2061 MB, allocated: 2048 MB | |
heap: ? used, ? committed, ? max, RSS: 3085 MB, allocated: 3072 MB | |
heap: ? used, ? committed, ? max, RSS: 4109 MB, allocated: 4096 MB | |
heap: ? used, ? committed, ? max, RSS: 5133 MB, allocated: 5120 MB | |
heap: ? used, ? committed, ? max, RSS: 6157 MB, allocated: 6144 MB | |
heap: ? used, ? committed, ? max, RSS: 7181 MB, allocated: 7168 MB | |
heap: ? used, ? committed, ? max, RSS: 8205 MB, allocated: 8192 MB | |
heap: ? used, ? committed, ? max, RSS: 9229 MB, allocated: 9216 MB | |
heap: ? used, ? committed, ? max, RSS: 10253 MB, allocated: 10240 MB | |
heap: ? used, ? committed, ? max, RSS: 11277 MB, allocated: 11264 MB | |
heap: ? used, ? committed, ? max, RSS: 12301 MB, allocated: 12288 MB | |
heap: ? used, ? committed, ? max, RSS: 13325 MB, allocated: 13312 MB | |
heap: ? used, ? committed, ? max, RSS: 14349 MB, allocated: 14336 MB | |
heap: ? used, ? committed, ? max, RSS: 15373 MB, allocated: 15360 MB | |
heap: ? used, ? committed, ? max, RSS: 16397 MB, allocated: 16384 MB | |
heap: ? used, ? committed, ? max, RSS: 17421 MB, allocated: 17408 MB | |
heap: ? used, ? committed, ? max, RSS: 18445 MB, allocated: 18432 MB | |
heap: ? used, ? committed, ? max, RSS: 19469 MB, allocated: 19456 MB | |
heap: ? used, ? committed, ? max, RSS: 20493 MB, allocated: 20480 MB | |
heap: ? used, ? committed, ? max, RSS: 21517 MB, allocated: 21504 MB | |
heap: ? used, ? committed, ? max, RSS: 22541 MB, allocated: 22528 MB | |
heap: ? used, ? committed, ? max, RSS: 23565 MB, allocated: 23552 MB | |
heap: ? used, ? committed, ? max, RSS: 24589 MB, allocated: 24576 MB | |
heap: ? used, ? committed, ? max, RSS: 25613 MB, allocated: 25600 MB | |
heap: ? used, ? committed, ? max, RSS: 26637 MB, allocated: 26624 MB | |
heap: ? used, ? committed, ? max, RSS: 27661 MB, allocated: 27648 MB | |
heap: ? used, ? committed, ? max, RSS: 28685 MB, allocated: 28672 MB | |
heap: ? used, ? committed, ? max, RSS: 29709 MB, allocated: 29696 MB | |
heap: ? used, ? committed, ? max, RSS: 30086 MB, allocated: 30720 MB | |
heap: ? used, ? committed, ? max, RSS: 30120 MB, allocated: 31744 MB | |
heap: ? used, ? committed, ? max, RSS: 30216 MB, allocated: 32768 MB | |
heap: ? used, ? committed, ? max, RSS: 30145 MB, allocated: 33792 MB | |
heap: ? used, ? committed, ? max, RSS: 30175 MB, allocated: 34816 MB | |
<killed by system OOM> | |
TruffleRuby Native: | |
$ ruby use_memory.rb | |
truffleruby 22.1.0-dev-4738bfea, like ruby 3.0.2, GraalVM CE Native [x86_64-linux] | |
total used free shared buff/cache available | |
Mem: 32102 1677 29908 1 516 30007 | |
Swap: 8191 1566 6625 | |
heap: 22 MB used, 22 MB committed, ? max, RSS: 206 MB, allocated: 0 MB | |
heap: 1048 MB used, 1048 MB committed, ? max, RSS: 1258 MB, allocated: 1024 MB | |
heap: 2070 MB used, 2084 MB committed, ? max, RSS: 2282 MB, allocated: 2048 MB | |
heap: 3086 MB used, 3098 MB committed, ? max, RSS: 3312 MB, allocated: 3072 MB | |
heap: 4111 MB used, 4125 MB committed, ? max, RSS: 4345 MB, allocated: 4096 MB | |
heap: 5132 MB used, 5145 MB committed, ? max, RSS: 5371 MB, allocated: 5120 MB | |
heap: 6160 MB used, 6172 MB committed, ? max, RSS: 6406 MB, allocated: 6144 MB | |
heap: 6157 MB used, 6169 MB committed, ? max, RSS: 7431 MB, allocated: 7168 MB | |
heap: 9232 MB used, 9244 MB committed, ? max, RSS: 8462 MB, allocated: 8192 MB | |
heap: 10252 MB used, 10268 MB committed, ? max, RSS: 9492 MB, allocated: 9216 MB | |
heap: 11280 MB used, 11292 MB committed, ? max, RSS: 10519 MB, allocated: 10240 MB | |
heap: 10252 MB used, 10265 MB committed, ? max, RSS: 11544 MB, allocated: 11264 MB | |
heap: 13327 MB used, 13340 MB committed, ? max, RSS: 12575 MB, allocated: 12288 MB | |
heap: 12302 MB used, 12313 MB committed, ? max, RSS: 13600 MB, allocated: 13312 MB | |
heap: 15375 MB used, 15388 MB committed, ? max, RSS: 14641 MB, allocated: 14336 MB | |
heap: 14348 MB used, 14361 MB committed, ? max, RSS: 15666 MB, allocated: 15360 MB | |
heap: 15375 MB used, 15385 MB committed, ? max, RSS: 16690 MB, allocated: 16384 MB | |
heap: 18445 MB used, 18454 MB committed, ? max, RSS: 17712 MB, allocated: 17408 MB | |
heap: 19471 MB used, 19478 MB committed, ? max, RSS: 18738 MB, allocated: 18432 MB | |
heap: 20492 MB used, 20497 MB committed, ? max, RSS: 19766 MB, allocated: 19456 MB | |
heap: 21518 MB used, 21521 MB committed, ? max, RSS: 20795 MB, allocated: 20480 MB | |
heap: 22541 MB used, 22545 MB committed, ? max, RSS: 21820 MB, allocated: 21504 MB | |
heap: 23566 MB used, 23568 MB committed, ? max, RSS: 22844 MB, allocated: 22528 MB | |
heap: 24589 MB used, 24591 MB committed, ? max, RSS: 23868 MB, allocated: 23552 MB | |
heap: 25614 MB used, 25615 MB committed, ? max, RSS: 24895 MB, allocated: 24576 MB | |
heap: 26638 MB used, 26639 MB committed, ? max, RSS: 25924 MB, allocated: 25600 MB | |
[ruby] WARNING OutOfMemoryError | |
use_memory.rb:11:in `status': failed to allocate memory (NoMemoryError) | |
$ ruby --vm.Xmx32g use_memory.rb | |
truffleruby 22.1.0-dev-4738bfea, like ruby 3.0.2, GraalVM CE Native [x86_64-linux] | |
total used free shared buff/cache available | |
Mem: 32102 1697 29875 1 529 29987 | |
Swap: 8191 1565 6626 | |
heap: 22 MB used, 22 MB committed, ? max, RSS: 212 MB, allocated: 0 MB | |
heap: 1049 MB used, 1049 MB committed, ? max, RSS: 1263 MB, allocated: 1024 MB | |
heap: 2072 MB used, 2086 MB committed, ? max, RSS: 2295 MB, allocated: 2048 MB | |
heap: 3086 MB used, 3100 MB committed, ? max, RSS: 3325 MB, allocated: 3072 MB | |
heap: 4111 MB used, 4127 MB committed, ? max, RSS: 4354 MB, allocated: 4096 MB | |
heap: 5134 MB used, 5149 MB committed, ? max, RSS: 5378 MB, allocated: 5120 MB | |
heap: 6160 MB used, 6173 MB committed, ? max, RSS: 6404 MB, allocated: 6144 MB | |
heap: 6157 MB used, 6170 MB committed, ? max, RSS: 7432 MB, allocated: 7168 MB | |
heap: 9231 MB used, 9245 MB committed, ? max, RSS: 8462 MB, allocated: 8192 MB | |
heap: 8205 MB used, 8218 MB committed, ? max, RSS: 9493 MB, allocated: 9216 MB | |
heap: 11279 MB used, 11293 MB committed, ? max, RSS: 10518 MB, allocated: 10240 MB | |
heap: 10252 MB used, 10266 MB committed, ? max, RSS: 11542 MB, allocated: 11264 MB | |
heap: 13328 MB used, 13341 MB committed, ? max, RSS: 12570 MB, allocated: 12288 MB | |
heap: 12301 MB used, 12314 MB committed, ? max, RSS: 13594 MB, allocated: 13312 MB | |
heap: 15375 MB used, 15389 MB committed, ? max, RSS: 14618 MB, allocated: 14336 MB | |
heap: 14349 MB used, 14362 MB committed, ? max, RSS: 15648 MB, allocated: 15360 MB | |
heap: 15374 MB used, 15386 MB committed, ? max, RSS: 16674 MB, allocated: 16384 MB | |
heap: 19471 MB used, 19486 MB committed, ? max, RSS: 17700 MB, allocated: 17408 MB | |
heap: 17420 MB used, 17434 MB committed, ? max, RSS: 18724 MB, allocated: 18432 MB | |
heap: 18446 MB used, 18458 MB committed, ? max, RSS: 19749 MB, allocated: 19456 MB | |
heap: 22545 MB used, 22552 MB committed, ? max, RSS: 20774 MB, allocated: 20480 MB | |
heap: 20493 MB used, 20500 MB committed, ? max, RSS: 21799 MB, allocated: 21504 MB | |
heap: 21518 MB used, 21524 MB committed, ? max, RSS: 22823 MB, allocated: 22528 MB | |
heap: 22544 MB used, 22548 MB committed, ? max, RSS: 23862 MB, allocated: 23552 MB | |
heap: 25611 MB used, 25615 MB committed, ? max, RSS: 24882 MB, allocated: 24576 MB | |
heap: 26639 MB used, 26639 MB committed, ? max, RSS: 25907 MB, allocated: 25600 MB | |
heap: 26635 MB used, 26639 MB committed, ? max, RSS: 26932 MB, allocated: 26624 MB | |
heap: 27662 MB used, 27663 MB committed, ? max, RSS: 27964 MB, allocated: 27648 MB | |
heap: 28681 MB used, 28687 MB committed, ? max, RSS: 28992 MB, allocated: 28672 MB | |
heap: 29710 MB used, 29711 MB committed, ? max, RSS: 30013 MB, allocated: 29696 MB | |
heap: 30734 MB used, 30735 MB committed, ? max, RSS: 30053 MB, allocated: 30720 MB | |
heap: 31758 MB used, 31759 MB committed, ? max, RSS: 30054 MB, allocated: 31744 MB | |
[ruby] WARNING OutOfMemoryError | |
<internal:core> core/io.rb:721:in `popen': failed to allocate memory (NoMemoryError) | |
TruffleRuby JVM: | |
$ ruby --jvm use_memory.rb | |
truffleruby 22.1.0-dev-b01678d5, like ruby 3.0.2, Interpreted JVM [x86_64-linux] | |
total used free shared buff/cache available | |
Mem: 32102 1770 30001 1 330 29918 | |
Swap: 8191 1603 6588 | |
heap: 74 MB used, 506 MB committed, 8026 MB max, RSS: 247 MB, allocated: 0 MB | |
heap: 1055 MB used, 1532 MB committed, 8026 MB max, RSS: 1255 MB, allocated: 1024 MB | |
heap: 2082 MB used, 2818 MB committed, 8026 MB max, RSS: 2306 MB, allocated: 2048 MB | |
heap: 3110 MB used, 3844 MB committed, 8026 MB max, RSS: 3383 MB, allocated: 3072 MB | |
heap: 4134 MB used, 4870 MB committed, 8026 MB max, RSS: 4425 MB, allocated: 4096 MB | |
heap: 5162 MB used, 5896 MB committed, 8026 MB max, RSS: 5516 MB, allocated: 5120 MB | |
heap: 6186 MB used, 6922 MB committed, 8026 MB max, RSS: 6557 MB, allocated: 6144 MB | |
heap: 7212 MB used, 7948 MB committed, 8026 MB max, RSS: 7643 MB, allocated: 7168 MB | |
[ruby] WARNING OutOfMemoryError | |
use_memory.rb:19:in `initialize': failed to allocate memory (NoMemoryError) | |
$ ruby --jvm --vm.Xmx32g use_memory.rb | |
truffleruby 22.1.0-dev-b01678d5, like ruby 3.0.2, Interpreted JVM [x86_64-linux] | |
total used free shared buff/cache available | |
Mem: 32102 1844 29837 1 420 29853 | |
Swap: 8191 1562 6629 | |
heap: 64 MB used, 504 MB committed, 32768 MB max, RSS: 294 MB, allocated: 0 MB | |
heap: 1072 MB used, 1776 MB committed, 32768 MB max, RSS: 1334 MB, allocated: 1024 MB | |
heap: 2103 MB used, 2808 MB committed, 32768 MB max, RSS: 2392 MB, allocated: 2048 MB | |
heap: 3135 MB used, 3840 MB committed, 32768 MB max, RSS: 3437 MB, allocated: 3072 MB | |
heap: 4167 MB used, 4872 MB committed, 32768 MB max, RSS: 4494 MB, allocated: 4096 MB | |
heap: 5199 MB used, 5904 MB committed, 32768 MB max, RSS: 5553 MB, allocated: 5120 MB | |
heap: 6231 MB used, 6936 MB committed, 32768 MB max, RSS: 6597 MB, allocated: 6144 MB | |
heap: 7263 MB used, 7968 MB committed, 32768 MB max, RSS: 7677 MB, allocated: 7168 MB | |
heap: 8294 MB used, 9000 MB committed, 32768 MB max, RSS: 8707 MB, allocated: 8192 MB | |
heap: 9326 MB used, 10032 MB committed, 32768 MB max, RSS: 9800 MB, allocated: 9216 MB | |
heap: 10359 MB used, 11064 MB committed, 32768 MB max, RSS: 10830 MB, allocated: 10240 MB | |
heap: 11391 MB used, 12096 MB committed, 32768 MB max, RSS: 11924 MB, allocated: 11264 MB | |
heap: 12422 MB used, 13128 MB committed, 32768 MB max, RSS: 12954 MB, allocated: 12288 MB | |
heap: 13454 MB used, 14160 MB committed, 32768 MB max, RSS: 14047 MB, allocated: 13312 MB | |
heap: 14486 MB used, 15192 MB committed, 32768 MB max, RSS: 15083 MB, allocated: 14336 MB | |
heap: 15518 MB used, 16224 MB committed, 32768 MB max, RSS: 16157 MB, allocated: 15360 MB | |
heap: 16558 MB used, 17256 MB committed, 32768 MB max, RSS: 17216 MB, allocated: 16384 MB | |
heap: 17582 MB used, 18288 MB committed, 32768 MB max, RSS: 18244 MB, allocated: 17408 MB | |
heap: 18614 MB used, 19320 MB committed, 32768 MB max, RSS: 19320 MB, allocated: 18432 MB | |
heap: 19646 MB used, 20352 MB committed, 32768 MB max, RSS: 20400 MB, allocated: 19456 MB | |
heap: 20679 MB used, 21384 MB committed, 32768 MB max, RSS: 21430 MB, allocated: 20480 MB | |
heap: 21711 MB used, 22416 MB committed, 32768 MB max, RSS: 22511 MB, allocated: 21504 MB | |
heap: 22751 MB used, 23448 MB committed, 32768 MB max, RSS: 23585 MB, allocated: 22528 MB | |
heap: 23774 MB used, 24480 MB committed, 32768 MB max, RSS: 24616 MB, allocated: 23552 MB | |
heap: 24806 MB used, 25512 MB committed, 32768 MB max, RSS: 25667 MB, allocated: 24576 MB | |
heap: 25846 MB used, 26544 MB committed, 32768 MB max, RSS: 26771 MB, allocated: 25600 MB | |
heap: 26871 MB used, 27576 MB committed, 32768 MB max, RSS: 27801 MB, allocated: 26624 MB | |
heap: 27903 MB used, 28608 MB committed, 32768 MB max, RSS: 28843 MB, allocated: 27648 MB | |
heap: 28935 MB used, 29640 MB committed, 32768 MB max, RSS: 29956 MB, allocated: 28672 MB | |
heap: 29966 MB used, 30672 MB committed, 32768 MB max, RSS: 30079 MB, allocated: 29696 MB | |
heap: 30998 MB used, 31704 MB committed, 32768 MB max, RSS: 30103 MB, allocated: 30720 MB | |
heap: 32030 MB used, 32736 MB committed, 32768 MB max, RSS: 30124 MB, allocated: 31744 MB | |
[ruby] WARNING OutOfMemoryError | |
use_memory.rb:19:in `initialize': failed to allocate memory (NoMemoryError) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment