Skip to content

Instantly share code, notes, and snippets.

@eregon
Last active March 23, 2022 11:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eregon/93523d087c283ac88d13a75845e5785e to your computer and use it in GitHub Desktop.
Save eregon/93523d087c283ac88d13a75845e5785e to your computer and use it in GitHub Desktop.
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
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