[Deploying Sakai] Urgent: Apache - Tomcat AJP issues

Steve Swinsburg steve.swinsburg at gmail.com
Wed Jul 27 23:06:49 PDT 2011


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


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/production/attachments/20110728/089a9ace/attachment.html 


More information about the production mailing list