On Wed, Jun 2, 2010 at 6:38 PM, Eric Wong <[email protected]> wrote: > Augusto Becciu <[email protected]> wrote: >> On Wed, Jun 2, 2010 at 5:25 PM, Eric Wong <[email protected]> wrote: >> > Augusto Becciu <[email protected]> wrote: >> >> Hey guys, >> >> >> >> Started running unicorn in a production server like two weeks ago. >> >> It's been running smoothly, but looking at the logs found 44 >> >> exceptions like this: >> >> >> >> E, [2010-06-02T16:17:15.117071 #22680] ERROR -- : Read error: >> >> #<TypeError: can't modify frozen string> >> >> E, [2010-06-02T16:17:15.117270 #22680] ERROR -- : >> >> /usr/lib/ruby/gems/1.8/gems/unicorn-0.99.0/lib/unicorn/http_request.rb:59:in >> >> `headers' >> > >> > <snip> >> > >> >> Ruby version: ruby 1.8.7 (2009-12-24 patchlevel 248) [i686-linux], >> >> MBARI 0x8770, Ruby Enterprise Edition 2010.01 >> >> >> >> Any ideas? Maybe a bug in the http parser? >> > >> > Hi Augusto, >> > >> > Somehow the reusable Unicorn::HttpRequest::BUF string constant is >> > getting frozen when it shouldn't be. Do you have any code that could >> > be freezing that string? That string object should never be returned to >> > the application via any code paths in Unicorn (env or tee_input). > > Please don't top post, thanks. > >> Hi Eric, >> >> There's no way our application could be freezing that constant, at >> least not intentionally. >> >> We're using New Replic's RPM plugin, but checked it out and couldn't >> find anything that could do that. >> >> http://github.com/newrelic/rpm/blob/master/lib/new_relic/agent/instrumentation/unicorn_instrumentation.rb >> >> Let me know if I can help in any way. > > Are you able to reproduce the problem without the RPM plugin? I've > never used RPM myself, but we've heard of (and proposed some fixes) > with it over the recent months. > > Some of those problems could be segfaults (on x86_64), but memory > corruption could also cause an unintentional freeze, as well... > > In particular, could you try disabling compression when sending things > upstream? > > (totally untested, I don't even have a New Relic account[1]). > > diff --git a/lib/new_relic/agent/agent.rb b/lib/new_relic/agent/agent.rb > index 928c6d7..5e60520 100644 > --- a/lib/new_relic/agent/agent.rb > +++ b/lib/new_relic/agent/agent.rb > @@ -554,7 +554,7 @@ module NewRelic > dump_size = dump.size > > # small payloads don't need compression > - return [dump, 'identity'] if dump_size < 2000 > + return [dump, 'identity'] > > # medium payloads get fast compression, to save CPU > # big payloads get all the compression possible, to stay under > --- > > There's also 1787b22eb2d8ab8b4046ae14be349aa487abc7b5 in the > v2.12.2_beta tag of git://github.com/newrelic/rpm which raises > the compression threshold, too... > > -- > Eric Wong > > [1] - yes I'm allergic to signing up for commercial things >
Thanks Eric! Unfortunately after completely disabling RPM, we keep getting that error. :( What else could it be? _______________________________________________ Unicorn mailing list - [email protected] http://rubyforge.org/mailman/listinfo/mongrel-unicorn Do not quote signatures (like this one) or top post when replying
