[Building Sakai] Urgent: Apache - Tomcat AJP issues

Steve Swinsburg steve.swinsburg at gmail.com
Thu Jul 28 02:52:23 PDT 2011


Thanks for the replies all, I'll pass that on the sysadmins and let you know how we get on.

regards,
Steve




On 28/07/2011, at 7:48 PM, Adrian Fish wrote:

> Have you set up the MaxClients property on the MPM worker? You have to do this as well as maxThreads in the AJP connector. If you don't indeterminate things start to happen when concurrent requests go up, especially on AJAXy applications.
> 
> http://cooking-sakai.blogspot.com/2011/02/tomcat-maxthreads-and-apache-maxclients.html
> 
> Cheers,
> Adrian.
> 
> On 28/07/2011 07:06, Steve Swinsburg wrote:
>> 
>> Hi all,
>> 
>> I'm assisting diagnose a problem with a production Sakai instance that is experiencing a lot of outages since upgrading to 2.8.0 from 2.5.0. Almost all of the time it seems like something is happening at the Apache-Tomcat AJP connection which locks things up and requires frequent reboots (already three today).
>> 
>> The stacktraces all come from org.apache.jk
>> 
>> 2011-07-28 14:15:43,824  WARN TP-Processor8 org.apache.jk.common.ChannelSocket - processCallbacks status 2
>> 2011-07-28 14:15:43,836  WARN TP-Processor23 org.apache.jk.common.ChannelSocket - processCallbacks status 2
>> 2011-07-28 14:15:43,864  WARN TP-Processor2 org.sakaiproject.content.impl.DbContentService - IOException 
>> java.io.IOException
>>  at org.apache.jk.common.JkInputStream.receive(JkInputStream.java:205)
>>  at org.apache.jk.common.JkInputStream.refillReadBuffer(JkInputStream.java:265)
>>  at org.apache.jk.common.JkInputStream.doRead(JkInputStream.java:183)
>>  at org.apache.coyote.Request.doRead(Request.java:419)
>>  at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:270)
>>  at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
>>  at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:293)
>>  at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:162)
>>  at org.sakaiproject.content.impl.DbContentService$DbStorage.putResourceBodyDb(DbContentService.java:2189)
>>  at org.sakaiproject.content.impl.DbContentService$DbStorage.commitResource(DbContentService.java:1745)
>>  at org.sakaiproject.content.impl.BaseContentService.commitResourceEdit(BaseContentService.java:5726)
>>  at org.sakaiproject.content.impl.BaseContentService.commitResource(BaseContentService.java:5539)
>>  at org.sakaiproject.dav.DavServlet.doPut(DavServlet.java:2779)
>>  at org.sakaiproject.dav.DavServlet.doDispatch(DavServlet.java:1139)
>>  at org.sakaiproject.dav.DavServlet.service(DavServlet.java:1066)
>>  at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
>>  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>>  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>>  at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:659)
>>  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
>>  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>>  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>>  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
>>  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:563)
>>  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>>  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>>  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>>  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
>>  at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
>>  at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
>>  at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:775)
>>  at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:704)
>>  at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:897)
>>  at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>>  at java.lang.Thread.run(Thread.java:662)
>> 2011-07-28 14:15:43,929  WARN TP-Processor14 org.apache.jk.common.ChannelSocket - processCallbacks status 2
>> 2011-07-28 14:15:44,119  INFO main org.apache.catalina.core.StandardWrapper - Waiting for 3 instance(s) to be deallocated
>> 
>> 2011-07-28 14:15:44,495  WARN TP-Processor12 org.apache.jk.common.ChannelSocket - processCallbacks status 2
>> 2011-07-28 14:15:44,496  WARN TP-Processor18 org.apache.jk.core.MsgContext - Unable to send headers
>> java.net.SocketException: Broken pipe
>>  at java.net.SocketOutputStream.socketWrite0(Native Method)
>>  at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
>>  at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
>>  at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:538)
>>  at org.apache.jk.common.JkInputStream.appendHead(JkInputStream.java:326)
>>  at org.apache.jk.core.MsgContext.action(MsgContext.java:267)
>>  at org.apache.coyote.Response.action(Response.java:183)
>>  at org.apache.coyote.Response.sendHeaders(Response.java:379)
>>  at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:313)
>>  at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:280)
>>  at org.apache.catalina.connector.Response.finishResponse(Response.java:484)
>>  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:177)
>>  at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
>>  at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
>>  at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:775)
>>  at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:704)
>>  at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:897)
>>  at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>>  at java.lang.Thread.run(Thread.java:662)
>> 
>> 
>> This time it was uploading a number of files in a folder (although total size only 4Mb).
>> 
>> The client has a standard Tomcat 8009 connector and then mod_proxy_ajp as per:
>> 
>> <VirtualHost *:80>
>>    ServerName  sakai.app.server
>>    ServerAlias sakai.server
>>    ServerAlias sakai.server.other.1
>>    ServerAlias sakai.server.other.2
>> 
>>    DocumentRoot        /var/www/html
>> 
>>    SetEnvIf client-ip ^NS$ REQ_FROM_LB
>>    SetEnvIf REQ_FROM_LB 1 DO_NOT_LOG
>>    SetEnvIf User-Agent nagios DO_NOT_LOG
>> 
>>    LogFormat "%{client-ip}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %v %A %D" combined_plus
>> 
>>    CustomLog "|cat >> /var/log/httpd/sakai-combined_log" combined_plus env=!DO_NOT_LOG
>>    ErrorLog "|cat >> /var/log/httpd/sakai-error_log"
>> 
>>    AcceptPathInfo on
>> 
>>    RedirectMatch permanent ^/$ https://sakai.server/portal
>> 
>>    # pass all requests through to local Tomcat on 8009 via AJP
>>    RewriteEngine   On
>>    RewriteCond     %{REQUEST_URI}  !^/$
>>    RewriteRule     ^/(.*)          ajp://localhost:8009/$1 [P,L]
>> 
>> </VirtualHost>
>> 
>> Any help much appreciated.
>> 
>> thanks,
>> Steve
>> 
>> 
>> 
>> 
>> _______________________________________________
>> sakai-dev mailing list
>> sakai-dev at collab.sakaiproject.org
>> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>> 
>> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org with a subject of "unsubscribe"
> 
> -- 
> ==================================
> Adrian Fish
> Software Engineer
> Centre for e-Science
> Bowland Tower South C Floor
> Lancaster University
> Lancaster
> LA1 4YW
> email: a.fish at lancaster.ac.uk
> 
> http://confluence.sakaiproject.org/display/YAFT/Yaft
> http://confluence.sakaiproject.org/display/CLOG/Home
> http://confluence.sakaiproject.org/display/BBB/Home
> _______________________________________________
> sakai-dev mailing list
> sakai-dev at collab.sakaiproject.org
> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
> 
> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org with a subject of "unsubscribe"

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20110728/dc2072e5/attachment.html 


More information about the sakai-dev mailing list