about summary refs log tree commit homepage
path: root/lib/unicorn/http_server.rb
DateCommit message (Collapse)
2011-06-15memory reductions in worker process
There's absolutely no need to keep the OptionParser around in worker processes.
2011-06-15http_server: kill another stack frame off
We always know we have zero workers at startup, so we don't need to check before hand. SIGHUP users may suffer a small performance decrease as a result, but there's not much we can do about it.
2011-06-15http_server: factor out inherit_listeners! method
This should be easier to understand and reduces garbage on stack, too.
2011-06-15remove BasicSocket.do_not_reverse_lookup setting
kgio never does reverse lookup
2011-06-15http_server: get rid of EINTR checks
Ruby IO.select never raises that, actually
2011-06-15http_server: further reduce stack usage for app.call
By avoid Array#each
2011-06-14http_server: small cleanups for attr assignments
ivar references using @ are slightly faster than calling attribute methods.
2011-06-14http_server: do not rescue from proper exits
Oops, it messes logging up badly.
2011-06-11runtime stack size reductions
This reduces the size of `caller` by 5 frames, which should make backtraces easier-to-read, raising exceptions less expensive, and reduce GC runtime.
2011-06-07configurator: add :ipv6only directive
Enabling this flag for an IPv6 TCP listener allows users to specify IPv6-only listeners regardless of the OS default. This should be interest to Rainbows! users.
2011-05-05http_parser: add max_header_len accessor
Rainbows! wants to be able to lower this eventually...
2011-05-04return 414 for URI length violations
There's an HTTP status code allocated for it in <http://www.iana.org/assignments/http-status-codes>, so return that instead of 400.
2011-04-26properly reseed OpenSSL::Random after forking
Using the return value of Kernel#srand actually made the problem worse. Using the value of Kernel#rand is required to actually get a random value to seed the OpenSSL PRNG. Thanks to ghazel for the bug report!
2011-04-21http_server: fix Rainbows! compatibility
Older Rainbows! redefines the ready_pipe= accessor method to call internal after_fork hooks.
2011-04-18documentation cleanup/reduction
Don't clutter up our RDoc/website with things that users of Unicorn don't need to see. This should make user-relevant documentation easier to find, especially since Unicorn is NOT intended to be an API.
2011-04-18reseed OpenSSL PRNG upon fork() of workers
OpenSSL seeds its PRNG with the process ID, so if a process ID is recycled, there's a chance of indepedent workers getting repeated PRNG sequences over a long time period iff the same PID is used. This only affects deployments that meet both of the following conditions: 1) OpenSSL::Random.random_bytes is called before forking 2) worker (but not master) processes are die unexpectedly The SecureRandom module in Ruby (and Rails) uses the OpenSSL PRNG if available. SecureRandom is used by Rails and called when the application is loaded, so most Rails apps with frequently dying worker processes are affected. Of course dying worker processes are bad and entirely the fault of bad application/library code, not the fault of Unicorn. Thanks for Alexander Dymo for reporting this. ref: http://redmine.ruby-lang.org/issues/4579
2011-04-18reinitialize PRNG for latest Ruby 1.8.7 releases
The current versions of Ruby 1.8 do not reseed the PRNG after forking, so we'll work around that by calling Kernel#srand. ref: http://redmine.ruby-lang.org/issues/show/4338
2011-04-13http_server: workers die on log reopen failures
They should then recover and inherit writable descriptors from the master when it respawns.
2011-02-18clear listeners array on SIGQUIT
We don't want to repeatedly reclose the same IOs and keep raising exceptions this way.
2011-02-02Fix Ruby 1.9.3dev warnings
for i in `git ls-files '*.rb'`; do ruby -w -c $i; done
2011-01-05close client socket after closing response body
Response bodies may capture the block passed to each and save it for body.close, so don't close the socket before we have a chance to call body.close
2011-01-05http_response: simplify the status == 100 comparison
No need to preserve the response tuplet if we're just going to unpack it eventually.
2011-01-05http_server: remove unnecessary 'nil'
2010-12-26http_server: remove needless lambda
We can just use a begin block at startup, this also makes life easier on RDoc.
2010-12-21http: hook up "trust_x_forwarded" to configurator
More config bloat, sadly this is necessary for Rainbows! :<
2010-12-09allow client_buffer_body_size to be tuned
Since modern machines have more memory these days and clients are sending more data, avoiding potentially slow filesystem operations for larger uploads can be useful for some applications.
2010-11-17http_server: fix HttpParserError constant resolution
"Unicorn" is no longer in the default constant resolution namespace.
2010-11-11configurator: enable "rewindable_input" directive
This allows users to override the current Rack spec and disable the rewindable input requirement. This can allow applications to use less I/O to minimize the performance impact when processing uploads.
2010-10-27reduce master process wakeups
To reduce CPU wakeups and save power during off hours, we can precalculate a safe amount to sleep before killing off idle workers.
2010-10-26master: remove limit on queued signals
If a moronic sysadmin is sending too many signals, just let them do it. It's likely something is terribly wrong when the server is overloaded with signals, so don't try to protect users from it. This will also help in case where TTOU signals are sent too quickly during shutdown, although sleeping between kill(2) syscalls is always a good idea because of how non-real-time signals are delivered.
2010-10-07start using more compact parser API
This should be easier for Rainbows! to use
2010-10-07http_server: avoid method redefinition warnings
We clobber the accessor methods.
2010-10-06various cleanups and reduce indentation
This also affects some constant scoping rules, but hopefully makes things easier to follow. Accessing ivars (not via accessor methods) are also slightly faster, so use them in the criticial process_client code path.