ハングしちゃうんですけど!(Grails 0.5+オリジナルパッチ)

コントローラ中でrender "hogehoe"したときと、GSPに飛ばしたとき(レイアウトがあるとき、ないとき)とでどれくらいスループットが変わるかをテストすることにした。
Windowsだとそもそもソケット周りが耐え切れないと思って、Linux(CentOS) on VMWare(仮想CPU数2)上のTomcatでアプリケーションを実行し、ApacheBench(ab)で -c 100 -n 10000 とかのパラメタで実行。
ところが、どうもハングしたみたいで、いつまでたっても返ってこない。
JProfilerを使用して、再度Tomcatを実行してApacheBenchで負荷をかけてみた。
2103秒間ブロックされてるって(スクリーンショットを参照のこと。見えないと思うけど)!
待っているスレッドのスタックトレースは以下のとおり。

org.codehaus.groovy.runtime.metaclass.MemoryAwareConcurrentReadMap.lockWrite()
org.codehaus.groovy.runtime.metaclass.MemoryAwareConcurrentReadMap.get(java.lang.Object)
org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(java.lang.Class)
groovy.lang.MetaClassRegistry.getMetaClass(java.lang.Class)
org.codehaus.groovy.runtime.Invoker.getMetaClass(java.lang.Object)
org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(java.lang.Object)
groovy.lang.Closure.<init>(java.lang.Object, java.lang.Object)
Test01Controller$_closure2.<init>(java.lang.Object, java.lang.Object)
Test01Controller.<init>()
java.lang.Class.newInstance()
org.codehaus.groovy.grails.commons.AbstractGrailsClass.newInstance()
java.lang.reflect.InvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[ ])
$Proxy3.newInstance()
org.springframework.context.ApplicationContext.getBean(java.lang.String)
org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.getControllerInstance(org.codehaus.groovy.grails.commons.GrailsControllerClass)
org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(java.lang.String, org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest, java.util.Map)
org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(java.lang.String, org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest)
org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
org.springframework.web.servlet.HandlerAdapter.handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
javax.servlet.http.HttpServlet.service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
URL: /pagetest-0.1/grails/test01.dispatch
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run()

ブロックして(待たせて)いるほうのスレッドのスタックトレースは以下のとおり。

java.lang.Object.wait()
org.codehaus.groovy.runtime.metaclass.MemoryAwareConcurrentReadMap.waitForWriteState()
org.codehaus.groovy.runtime.metaclass.MemoryAwareConcurrentReadMap.put(java.lang.Object, java.lang.Object)
org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(java.lang.Class)
groovy.lang.MetaClassRegistry.getMetaClass(java.lang.Class)
org.codehaus.groovy.runtime.Invoker.invokeStaticMethod(java.lang.Class, java.lang.String, java.lang.Object)
org.codehaus.groovy.runtime.InvokerHelper.invokeStaticMethod(java.lang.Class, java.lang.String, java.lang.Object)
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeStaticMethodN(java.lang.Class, java.lang.Class, java.lang.String, java.lang.Object[ ])
Test01Controller.<init>()
java.lang.Class.newInstance()
org.codehaus.groovy.grails.commons.AbstractGrailsClass.newInstance()
java.lang.reflect.InvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[ ])
$Proxy3.newInstance()
org.springframework.context.ApplicationContext.getBean(java.lang.String)
org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.getControllerInstance(org.codehaus.groovy.grails.commons.GrailsControllerClass)
org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(java.lang.String, org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest, java.util.Map)
org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsControllerHelper.handleURI(java.lang.String, org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest)
org.codehaus.groovy.grails.web.servlet.mvc.SimpleGrailsController.handleRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
org.springframework.web.servlet.HandlerAdapter.handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
javax.servlet.http.HttpServlet.service(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
URL: /pagetest-0.1/grails/test01.dispatch
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)
org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run()

これって、Groovyかな。pageEncodingパッチのせいじゃないよねぇ? http://jira.codehaus.org/browse/GRAILS みても、issueが多くて既に登録されているのか良く分からない...