Application_Timeouts CONTRIBUTORS DESIGN FAQ HACKING ISSUES KNOWN_ISSUES LICENSE Links NEWS PHILOSOPHY README SIGNALS Sandbox TUNING unicorn_1
Unicorn Configurator HttpServer OobGC PrereadInput StreamInput TeeInput Util Worker

Methods

::new

module Unicorn::OobGC

Strongly consider github.com/tmm1/gctools if using Ruby 2.1+ It is built on new APIs in Ruby 2.1, so it is more intelligent than this historical implementation.

Users on Ruby 2.0 (not 2.1+) may also want to check out lib/middleware/unicorn_oobgc.rb from the Discourse project (github.com/discourse/discourse)

The following information is only for historical versions of Ruby.

Runs GC after requests, after closing the client socket and before attempting to accept more connections.

This shouldn't hurt overall performance as long as the server cluster is at <50% CPU capacity, and improves the performance of most memory intensive requests. This serves to improve client-visible performance (possibly at the cost of overall performance).

Increasing the number of worker_processes may be necessary to improve average client response times because some of your workers will be busy doing GC and unable to service clients. Think of using more workers with this module as a poor man's concurrent GC.

We'll call GC after each request is been written out to the socket, so the client never sees the extra GC hit it.

This middleware is only effective for applications that use a lot of memory, and will hurt simpler apps/endpoints that can process multiple requests before incurring GC.

This middleware is only designed to work with unicorn, as it harms performance with keepalive-enabled servers.

Example (in config.ru):

require 'unicorn/oob_gc'

# GC ever two requests that hit /expensive/foo or /more_expensive/foo
# in your app.  By default, this will GC once every 5 requests
# for all endpoints in your app
use Unicorn::OobGC, 2, %r{\A/(?:expensive/foo|more_expensive/foo)}

Feedback from users of early implementations of this module:

Public Class Methods

new (app, interval = 5, path = %r{\A/}) source

this pretends to be Rack middleware because it used to be But we need to hook into unicorn internals so we need to close the socket before clearing the request env.

interval is the number of requests matching the path regular expression before invoking GC.


Pages Classes Methods
mail archives: https://yhbt.net/unicorn-public/
	http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/unicorn-public/ 
	nntps://news.public-inbox.org/inbox.comp.lang.ruby.unicorn 
	nntp://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.unicorn 
	nntp://news.gmane.io/gmane.comp.lang.ruby.unicorn.general 
	imaps://;AUTH=ANONYMOUS@yhbt.net/inbox.comp.lang.ruby.unicorn.0 
	imap://;AUTH=ANONYMOUS@7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/inbox.comp.lang.ruby.unicorn.0 
public: unicorn-public@yhbt.net
source code: git clone https://yhbt.net/unicorn.git
	torsocks git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/unicorn.git