grape-on-rack icon indicating copy to clipboard operation
grape-on-rack copied to clipboard

Expose potential leaks

Open slauwers opened this issue 11 years ago • 2 comments

Following the discussion around issue #665 in intridea/grape, this PR adds some contextual information when running the spec on the Ping API (bundle exec rspec spec/api/ping_spec.rb). Please note that the tests themselves have not been changed, only additional information is being displayed.

If you need the tests to expose the issue by actually testing for it and failing, please let me know. Upon running the ping spec, you should see something along the lines of:

Grape::Route                                                         87 delta         71
Grape::Util::HashStack                                               68 delta         28
Grape::Endpoint                                                      55 delta         28

Please also note that sometimes, two other classes seem to not be properly GC'd, however I don't know how relevant this is to the issue at hand.

Grape::Route                                                         87 delta         71
Grape::Util::HashStack                                               68 delta         28
Grape::Endpoint                                                      56 delta         29
Grape::Request                                                        1 delta          1
Grape::Cookies                                                        1 delta          1

slauwers avatar Oct 20 '14 12:10 slauwers

Just for the record, I've added a few commits that also display the offending files where the allocations happened. For example, this is what I'm seeing on my machine:

Grape::Route                                           87 delta     71
  # lib/grape/endpoint.rb:126                                       71
Grape::Util::HashStack                                 68 delta     28
  # lib/grape/util/hash_stack.rb:111                                28
Grape::Endpoint                                        56 delta     29
  # lib/grape/endpoint.rb:156                                        1
  # lib/grape/api.rb:365                                            28
Grape::Path                                            33 delta     33
  # lib/grape/path.rb:4                                             33
Grape::Request                                          1 delta      1
  # lib/grape/endpoint.rb:396                                        1
Grape::Cookies                                          1 delta      1
  # lib/grape/endpoint.rb:293                                        1

From this, I'm starting to suspect lib/grape/api.rb:365 to be involved in this. I'll keep looking and post my findings.

slauwers avatar Oct 20 '14 13:10 slauwers

For the record, I retried this today on https://github.com/dblock/grape-on-rack/tree/INTERACT-IV-expose-potential-leaks with some minor changes (warm up and GC.start) and it didn't show any leaks. Leaving this open because this is some nice code to debug Grape memory. Maybe it can be turned into a library or something?

dblock avatar Jun 18 '22 16:06 dblock