Skip to content

Instantly share code, notes, and snippets.

@timriley
Last active October 19, 2022 20: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 timriley/417595e404e58efb92a5290a4942ef1a to your computer and use it in GitHub Desktop.
Save timriley/417595e404e58efb92a5290a4942ef1a to your computer and use it in GitHub Desktop.
hanami-controller memory profile for Hanami::Action inheritance (with hanami-controller 2.0.0.beta4 and dry-configurable 0.16.1)
# Running TIMES=10000 be ruby benchmarks/memory_profile_action.rb
Total allocated: 32766232 bytes (90004 objects)
Total retained: 32766232 bytes (90004 objects)
allocated memory by gem
-----------------------------------
21486072 other
10880120 dry-configurable-0.16.1
400040 3.1.2/lib
allocated memory by file
-----------------------------------
21486072 benchmarks/memory_profile_action_temp.rb
9280000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/settings.rb
1200080 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb
400040 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb
400040 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb
allocated memory by location
-----------------------------------
21486072 benchmarks/memory_profile_action_temp.rb:10
9280000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/settings.rb:52
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb:288
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb:16
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:193
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:37
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:42
40 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb:246
40 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb:82
40 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:27
40 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:30
allocated memory by class
-----------------------------------
21086072 Class
10080080 Hash
400040 Hanami::Action::Config
400040 Set
400000 <<Unknown>>
400000 Dry::Configurable::Settings
allocated objects by gem
-----------------------------------
50003 dry-configurable-0.16.1
30000 other
10001 3.1.2/lib
allocated objects by file
-----------------------------------
30002 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb
30000 benchmarks/memory_profile_action_temp.rb
10001 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb
10001 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/settings.rb
allocated objects by location
-----------------------------------
30000 benchmarks/memory_profile_action_temp.rb:10
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb:288
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb:16
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:193
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:37
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:42
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/settings.rb:52
1 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb:246
1 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb:82
1 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:27
1 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:30
allocated objects by class
-----------------------------------
30002 Hash
20000 Class
10001 Hanami::Action::Config
10001 Set
10000 <<Unknown>>
10000 Dry::Configurable::Settings
retained memory by gem
-----------------------------------
21486072 other
10880120 dry-configurable-0.16.1
400040 3.1.2/lib
retained memory by file
-----------------------------------
21486072 benchmarks/memory_profile_action_temp.rb
9280000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/settings.rb
1200080 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb
400040 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb
400040 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb
retained memory by location
-----------------------------------
21486072 benchmarks/memory_profile_action_temp.rb:10
9280000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/settings.rb:52
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb:288
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb:16
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:193
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:37
400000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:42
40 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb:246
40 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb:82
40 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:27
40 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:30
retained memory by class
-----------------------------------
21086072 Class
10080080 Hash
400040 Hanami::Action::Config
400040 Set
400000 <<Unknown>>
400000 Dry::Configurable::Settings
retained objects by gem
-----------------------------------
50003 dry-configurable-0.16.1
30000 other
10001 3.1.2/lib
retained objects by file
-----------------------------------
30002 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb
30000 benchmarks/memory_profile_action_temp.rb
10001 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb
10001 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/settings.rb
retained objects by location
-----------------------------------
30000 benchmarks/memory_profile_action_temp.rb:10
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb:288
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb:16
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:193
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:37
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:42
10000 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/settings.rb:52
1 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/3.1.0/set.rb:246
1 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/class_methods.rb:82
1 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:27
1 /Users/tim/.asdf/installs/ruby/3.1.2/lib/ruby/gems/3.1.0/gems/dry-configurable-0.16.1/lib/dry/configurable/config.rb:30
retained objects by class
-----------------------------------
30002 Hash
20000 Class
10001 Hanami::Action::Config
10001 Set
10000 <<Unknown>>
10000 Dry::Configurable::Settings
@timriley
Copy link
Author

This is the "after" profile. See https://gist.github.com/timriley/6c512c100c179070c673afc578618386 for the "before" profile.

@timriley
Copy link
Author

Here's the resulting r10k comparison:

memory

@timriley
Copy link
Author

And if we change the generated Rails app to use one controller class per action (instead of a single class containing 10,000 action methods):

memory with rails single controller per action

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment