DEV is a Ruby on Rails application deployed on Heroku servers.
The other day Molly Struve, our resident SRE sorceress, noticed we were having some...
For further actions, you may consider blocking this person and/or reporting abuse
Great job Rhymes and Molly!
I would also suggest few things to track down the issue further:
Creating a rails app with just one endpoint and all the gems used in DEV, to determine the normal from the abnormal memory usage.
Using a memory profiler and determining which endpoints account for the majority of the memory usage.
After pinpointing the bottlenecks, you might consider switching their implementations into a faster one like C/Go/Rust (I suspect the serialization and deserialization are the culprits).
All that above matters if there is some real financial pain, otherwise it's not worth pursuing π
Thanks a lot for the suggestions!
The gem
derailed_benchmarksalso helps:Go faster, off the Rails - Benchmarks for your whole Rails app
Derailed Benchmarks
A series of things you can use to benchmark a Rails or Ruby app.
Compatibility/Requirements
This gem has been tested and is known to work with Rails 3.2+ using Ruby 2.1+. Some commands may work on older versions of Ruby, but not all commands are supported.
For some benchmarks, not all, you'll need to verify you have a working version of curl on your OS:
Install
Put this in your gemfile:
Then run
$ bundle install.While executing your commands you may need to use
bundle execbefore typing the command.To use all profiling methods available also add:
You must be using Ruby 2.1+ to install these libraries. If you're on an older version of Ruby, what are you waiting for?
Use
There areβ¦
Looks like PHP internally uses
mallocimplementation?php.net/manual/en/internals2.memor...
I'm not 100% sure about it, as I'm unfamiliar with PHP. I went as far as this file github.com/php/php-src/blob/master... which contains the declaration of the list of allocators you linked.
same story happened to our nodejs project (mostly processing jpeg image buffers with libvips), jemalloc managed to save about half of memory usage.
(using github.com/gaffneyc/heroku-buildpa...)
I've been using Jemalloc here and it solved all my Sidekiq eating infinite memory issues. It is just amazing!