Hi, I'm sorry, I'm progressing very slowly on the issue as time permits me. My new tests again tend to prove Goldspkie has a leak while Webrick hasn't. This time I loaded my server using a very basic request with no other Java Integration involved except Golspike itself. I can't see any leak on Webrick, so it's unlikely the app itself or Rails has got a leak.
I know I should have force the GC with JConsole, but I hadn't time to do that in my dev env while I couldn't connect to my prod env with JConsole - I can't understand why that failed by the way! My server is Tomcat 6.013, java 1.6u2, Linux 2.6.18. I'm on JRuby head, with last Goldspike public release. I loaded the server with JMeter, about 10 thread requesting every 3 secs. Almost all request are being answered code 200. Fresh Tomcat, only a few requests: Class Instance Count Total Size class [C 241560 10559832 class org.jruby.runtime.ObjectSpace$WeakReferenceListNode 283638 7941864 class [B 114083 6585746 class java.lang.String 230388 3686208 class [I 5143 3370844 class org.jruby.ast.CallNode 91649 3299364 class [Ljava.util.HashMap$Entry; 27502 2687420 class jregex.Term 27845 2673120 class java.util.HashMap$Entry 138551 2216816 class org.jruby.util.ByteList 104350 2191350 Tomcat eating 24% of my Ram after hundreds of requests: PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 18 0 439m 233m 6320 S 20.0 23.5 6:29.32 java Resolving 4184874 objects (after jhat) Class Instance Count Total Size class [C 241560 10559832 class org.jruby.runtime.ObjectSpace$WeakReferenceListNode 283638 7941864 class [B 114083 6585746 class java.lang.String 230388 3686208 class [I 5143 3370844 class org.jruby.ast.CallNode 91649 3299364 class [Ljava.util.HashMap$Entry; 27502 2687420 class jregex.Term 27845 2673120 class java.util.HashMap$Entry 138551 2216816 class org.jruby.util.ByteList 104350 2191350 Tomcat now eating 25% of my Ram after a few dozens of other requests: PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 16 0 439m 248m 6336 S 32.6 25.0 8:16.24 java Resolving 4155328 objects (after jhat) Class Instance Count Total Size class [B 183149 22359030 class [C 308307 11898332 class [I 28122 9874916 class org.jruby.runtime.ObjectSpace$WeakReferenceListNode 267281 7483868 class java.lang.String 302485 4839760 class [Ljava.util.HashMap$Entry; 51167 4525672 class org.jruby.ast.CallNode 118416 4262976 class java.util.HashMap$Entry 229064 3665024 class org.jruby.util.ByteList 166546 3497466 Obviously the Ruby byte arrays are taking a lot of resources. they might be normal String be they can be leak, still pretty hard to tell. I'll try while forcing the GC but I fear I can't do that before the middle of the next week now. You guys that have deployed Goldspike can promise me you never saw a leak? This leak has been there since even before JRuby 1.0 and either on Tomcat 6 and Glassfish v2. Also what sucks is that if I wait more closer to the server freeze, my dump is so large that I can't inspect it with JHat (>400 Mo). Alternatively this could be a JVM misconfiguration but I tried a bunch of things what you guys are you using to launch your server? Any help would be appreciated. Raphaël Valyi. On 7/18/07, Robert Egglestone <[EMAIL PROTECTED]> wrote: > I've had a quick run through the GoldSpike code, and can't see anywhere > that runtimes are referenced other than local variables. > The runtime pool creates at least "minIdle" runtimes, and will create up > to "maxObjects". However, as it stands it shouldn't decrease the number > of runtimes available. > > The logs should show "Runtime X loaded" every time a runtime is created. > > Cheers, > Robert > > > Charles Oliver Nutter wrote: > > Raphaël Valyi wrote: > > > >> Hi all, > >> > >> > >> Since even before JRuby 1.0, My JRuby on Rails app never lasted more > >> than 24 hours in prod env when while being browsed by Google and Yahoo > >> bots. > >> > >> I investigated on this recently, and, while I'm not completely sure, > >> it seems that JRuby (from 1.0 to head; Java 6u2; Linux 2.6.18) doesn't > >> leak when using Webrick as a web server (In dev mode I'm using webrick > >> and never saw any leak while loading my server and profiling/garbage > >> collecting with JConsole.) > >> > >> But with Goldspike, either under Glassfish v2, either under Tomcat 6, > >> it seems that I'v got a very little memory leak that ends crashing my > >> server. > >> > >> With the JMeter load tool, I was able to fill my RAM (total 1 Go) by > >> sending as much as several thousands of requests (at 2 Req/sec, all > >> answered 200). And when letting my server in the WWW, It crashes in > >> about 24 hours or less but with less request (so may be the > >> variablitity has some influence). > >> > >> I never saw any error in my Ruby log file. > >> > >> It seems that the objects eating my RAM a(after jmap and jhat) are > >> Ruby arrays of integers. I don't know were they do come from, but I'm > >> quite sure they don't result from my specific code. My session dump is > >> clean too. > >> > > > > The [I were suspicious but I'm not sure they're the culprit. There's > > also a large number of constructs related to jregex, which does use [I > > for various things. Is it possible there's a regex leak somewhere? > > > > Other than that...in GoldSpike do runtimes ever go away/get collected if > > not in use? Are there links from any server-wide state to the runtimes > > that might keep them from going away? > > > > Raphael: Any way you can track how many JRoR runtimes might be spinning > > up in your process? > > > > - Charlie > > _______________________________________________ > > Jruby-extras-devel mailing list > > [email protected] > > http://rubyforge.org/mailman/listinfo/jruby-extras-devel > > > _______________________________________________ Jruby-extras-devel mailing list [email protected] http://rubyforge.org/mailman/listinfo/jruby-extras-devel
