😎
Ruby でメモリの使用量を調べる
Ruby で『実行中の Ruby で消費しているメモリの使用量』を調べたい場合に ObjectSpace.#memsize_of_all
が利用できます。
ObjectSpace.#memsize_of_all
では消費しているメモリの使用量をバイト単位で返します。
require "objspace"
# この時点で消費しているメモリの使用量を返す
pp ObjectSpace.memsize_of_all
# => 1898764
# 適当にメモリを消費するようなコードを書くと
(1..10000).map { "a" * _1 }.select { _1.size.even? }.join("-")
# 使用量が増えている
pp ObjectSpace.memsize_of_all
# => 77403654
また、これを応用することで『特定の処理がどれぐらいメモリを消費しているのか』も比較的簡単に検証できます。
require "objspace"
def memory_check
ObjectSpace.memsize_of_all.then { |start|
yield
ObjectSpace.memsize_of_all - start
}
end
# ブロック内で消費したメモリの使用量が検証できる
result = memory_check {
"a" * 1000
}
pp result # => 1161
# 逆に GC すれば解放されたメモリの使用量がわかりそう?
result = memory_check {
GC.start
}
pp result # => -5252
シュッとメモリの使用量を検証したい場合は便利ですね。
注意点としては ObjectSpace.#memsize_of_all
は完全な値を返すわけではなくあくまでも『ヒント』レベルの値が返ってきます(厳密な意味で malloc
されたメモリの消費量というわけではない
また CRuby 以外の処理系では動作しません。
とはいえ、なんとなく『めっちゃ消費している』とか『メモリの消費が増えた・減った』ぐらいなレベルで検証するのであれば役には立ちそうですかねー。
Discussion