Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Curious Case of Ruby's memory
Search
Hemant Kumar
September 30, 2014
Programming
0
120
Curious Case of Ruby's memory
A roundup of Ruby memory profiling and GC
Hemant Kumar
September 30, 2014
Tweet
Share
More Decks by Hemant Kumar
See All by Hemant Kumar
introduction to dtrace
gnufied
3
160
Ruby 2.0 upcoming changes
gnufied
0
110
Building RESTful APIs
gnufied
13
910
Ruby introduction for newbies
gnufied
8
1k
Other Decks in Programming
See All in Programming
Rubyでつくるパケットキャプチャツール
ydah
0
420
Amazon Nova Reelの可能性
hideg
0
240
chibiccをCILに移植した結果 (NGK2025S版)
kekyo
PRO
0
190
ファインディの テックブログ爆誕までの軌跡
starfish719
1
690
個人アプリを2年ぶりにアプデしたから褒めて / I just updated my personal app, praise me!
lovee
0
300
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
29
4.7k
AWS Lambda functions with C# 用の Dev Container Template を作ってみた件
mappie_kochi
0
210
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
動作確認やテストで漏れがちな観点3選
starfish719
5
740
Compose でデザインと実装の差異を減らすための取り組み
oidy
1
230
ペアーズでの、Langfuseを中心とした評価ドリブンなリリースサイクルのご紹介
fukubaka0825
1
170
SpringBoot3.4の構造化ログ #kanjava
irof
2
580
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
39
1.9k
Code Reviewing Like a Champion
maltzj
521
39k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Making the Leap to Tech Lead
cromwellryan
133
9k
Docker and Python
trallard
43
3.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
3
370
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
52k
How GitHub (no longer) Works
holman
312
140k
Optimizing for Happiness
mojombo
376
70k
Thoughts on Productivity
jonyablonski
68
4.4k
Transcript
Curious case of Ruby’s memory
Garbage Collection
How it used to work
Mark and Sweep
None
Generational GC
Most objects die Young
None
active_users[user.id] = user Old gen object New object
Bug!
None
None
memcpy(RARRAY_PTR(ary)[i], src, array_len(src)) Copy into ruby array Object in old
gen
None
None
Key take aways
Don’t use low level access for Ruby DS in C
extensions, such RARRAY_PTR
If your C-ext holds ref. to a Ruby object you
need Write Barriers for taking adv. of Gen. GC.
GC Tuning via ENV variables
Part 2
Memory Profiling Ruby apps
None
Thanks to Ruby 2.1
RBKit
None
None
None
None
RBkit Team • Emil • Kashyap • Yuva • Hemant
And
http://codemancers.com
C is what Linus Torvalds wrote.
About RBKit • A low overhead Ruby Profiler built for
MRI. • Written almost completely in C.
RBKit • A Desktop application • A Ruby gem
RBKit • Gather and send all profile data via ZeroMQ
to connected client (Desktop app) • Uses msgpack as serialization format.
Advantage RBKit • ZeroMQ manages separate IO threads for sending
and receiving messages. • Msgpack serialisation is fast. • A profiler that can be used in production!
Using it ! require 'rbkit' ! Rbkit.start_profiling
RbkitApp
RbkitApp • Cross platform - Qt/C++ • Webkit/Javascript for rendering
charts. • Sqlite
Why Qt/C++? • All heavy lifting is done client side.
• Parsing and processing heap dump of millions of objects. • We can still render certain pages/data using plain HTML via Qt Webkit bridge.
Tools used • Valgrind • leaks (Try this command on
OSX now!)
RBkit Status Report • Memory Profiling works (Demo) • CPU
Profiling is in works. • Open source
RbkitApp Demo
GC tuning visualizations
RUBY_GC_HEAP_INIT_SLOTS
RUBY_GC_HEAP_GROWTH_FACTOR
Ruby Heap vs C heap • Rvalue size = 40
bytes • If Object can’t fit that size, ruby uses ruby_xmalloc() • which is wrapper around malloc()
RUBY_GC_MALLOC_LIMIT
Thank you! • https://github.com/code-mancers/rbkit • https://github.com/code-mancers/rbkit- client • http://thorstenball.com/blog/2014/03/12/ watching-understanding-ruby-2.1-garbage-
collector/ • http://tmm1.net/ruby21-rgengc/
@gnufied http://www.codemancers.com Hemant Kumar