Read error: #<TypeError: can't modify frozen string> raised from HttpParser
augusto at jadedpixel.com
Thu Jun 3 19:05:21 EDT 2010
On Wed, Jun 2, 2010 at 6:38 PM, Eric Wong <normalperson at yhbt.net> wrote:
> Augusto Becciu <augusto at jadedpixel.com> wrote:
>> On Wed, Jun 2, 2010 at 5:25 PM, Eric Wong <normalperson at yhbt.net> wrote:
>> > Augusto Becciu <augusto at jadedpixel.com> 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.
>> 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
> (totally untested, I don't even have a New Relic account).
> 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
>  - 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?
More information about the mongrel-unicorn