Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chetan/sidekiq-recycler
Recycle large sidekiq processes
https://github.com/chetan/sidekiq-recycler
Last synced: 2 months ago
JSON representation
Recycle large sidekiq processes
- Host: GitHub
- URL: https://github.com/chetan/sidekiq-recycler
- Owner: chetan
- Created: 2013-10-14T16:12:08.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2015-05-26T03:01:09.000Z (over 9 years ago)
- Last Synced: 2024-10-08T23:21:36.066Z (3 months ago)
- Language: Ruby
- Homepage:
- Size: 186 KB
- Stars: 7
- Watchers: 2
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Sidekiq Recycler
Gracefully recycle sidekiq processes that use too much memorysidekiq-recycler is a simple middleware which checks the process's RSS usage on
the completion of each job. When the usage surpasses a predefined limit, the process
will gracefully terminate. If any jobs are still running beyond a further time threshold,
they will be killed and requeued.sidekiq-recycler is best used with a process monitor like god, monit, upstart,
etc, so that your sidekick process will be properly restarted after it quits.## Quickstart
```
$ gem install sidekiq-recycler
``````ruby
# Add the middleware
require "sidekiq"
require "sidekiq/recycler"Sidekiq.configure_server do |config|
config.server_middleware do |chain|
chain.add Sidekiq::Recycler, :mem_limit => 300_000, :hard_limit_sec => 300
end
end
```## Configuration
Two options are exposed by the middleware:
* mem_limit: RSS usage limit, in megabytes
* hard_limit_sec: time in seconds to wait for jobs to finish, after graceful shutdown initiated## Kick the tires
You can see the recycler in action by doing the following (requires redis server):
```bash
git clone https://github.com/chetan/sidekiq-recycler.git
cd sidekiq-recycler
bundle exec sidekiq --queue="*" --require ./test/support/workers.rb
```And in another terminal:
```bash
bundle exec test/support/create_jobs.rb
```This will spawn some jobs that eat lots of memory and a single jobs which runs forever.
You should see messages like the following printed on your console:```
2013-10-14T18:04:19Z WARN: Recycler threshold reached: 102848 > 100000
2013-10-14T18:04:19Z WARN: Attempting to stop gracefully
2013-10-14T18:04:19Z INFO: Shutting down 21 quiet workers
2013-10-14T18:04:49Z WARN: Hard limit of 30sec reached; sending TERM signal
2013-10-14T18:04:49Z INFO: Shutting down 0 quiet workers
2013-10-14T18:04:49Z INFO: Pausing up to 8 seconds to allow workers to finish...
2013-10-14T18:04:57Z INFO: Still waiting for 3 busy workers
2013-10-14T18:04:57Z INFO: Pushed 3 messages back to Redis
2013-10-14T18:04:57Z INFO: All threads stopped; exiting now!
```