Title: RE: FW: problem w/ ajp13 - if Tomcat is shutdown

Here's exactly what I did to reproduce the problem.
Again, I'm running this on a Solaris 2.8 SunOS machine,
using JDK1.2.2, Apache 1.3.14, Tomcat 3.2.1.

1. Start Apache
2. Start Tomcat
3. Start hitting Apache with multiple requests, such as
   /example/servlet/HelloWorldExample. Make sure there
   are some connections opened from Apache to Tomcat.
   To make sure, you can do netstat -a | grep <Tomcat port>
   where <Tomcat port> is the ajp13 port. It should show
   some socket in ESTABLISHED state.
4. While the connections are in the ESTABLISHED state
   (this should be the state because ajp13 reuse
   connections), shutdown Tomcat. Now you will notice
   the same netstat will show some sockets in FIN_WAIT2
   and CLOSE_WAIT state.
5. Now restart Tomcat.
6. Repeat step 3. You will get Internal Server Error, up
   to the number of children Apache has. After that number,
   the page will be served.

Attached is the server.xml, workers.properties, httpd.conf.
My test servlet is called /mytest/servlet/testServlet but
I think you can try it with any kind of servlet.

I have been trying to code up the retry I mentioned below.
I think I got it working. I just need to clean up the code
some more.

shinta

> -----Original Message-----
> From: oliver2, andy [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, March 06, 2001 6:33 PM
> To: 'Shinta Tjio '; '[EMAIL PROTECTED] '
> Cc: ''Dan Milstein' '
> Subject: RE: FW: problem w/ ajp13 - if Tomcat is shutdown
>
>
>  I was running recently with that exact same configuration but did not
> experience that problem.  Can you show some config files.
>
> -Andy
>
> -----Original Message-----
> From: Shinta Tjio
> To: [EMAIL PROTECTED]
> Cc: 'Dan Milstein'
> Sent: 3/6/01 7:01 PM
> Subject: RE: FW: problem w/ ajp13 - if Tomcat is shutdown
>
> I am using Tomcat 3.2.1, Apache 1.3.14, running on
> Solaris 2.8, Sun machines.
>
> After various attempts of debugging this, I have
> more information.
>
> 1. Even though I'm setting the worker's property
> cache_size to default (1), I'm finding there
> are up to 6 connections opened from Apache to
> Tomcat. I deduce this by looking at the mod_jk.conf
> and by doing netstat.
>
> I finally find out, this is so because my Apache
> is set to spawn minimum of 6 children and each
> of those children are making separate connections
> to Tomcat.
>
> This is very bad because, I ended up having to
> reload 6 times before Tomcat starts serving me
> the page again. Each time it uses a different
> Apache children that has defunct socket. So the
> more Apache children I have, the longer it takes
> me to recover from this problem.
>
> 2. It seems when Tomcat dies & restarts, the send()
> called by ajp13's jk_tcp_socket_sendfull() does not
> get an error. But the recv() does get an error, with
> errno ECONNRESET. After which, the socket is properly
> closed.
>
> 3. When I shutdown Tomcat, those sockets that were
> opened between Apache/Tomcat showed up in state
> CLOSE_WAIT, and FIN_WAIT2. I think this is normally
> solved by calling the shutdown() API after closing
> the socket. However, this would have to be done from
> the Tomcat side in Ajp13ConnectionHandler.java.
> I can't find the corresponding method of Socket
> in Java.
>
> So.. based on all of these, the only fix I can think
> of putting is to make mod_jk retry the send() if
> recv() comes back with an error ECONNRESET. The retry
> should happen after the old socket is properly closed.
>
> Anyone wants to comment?
>
> shinta
>  
>
> > -----Original Message-----
> > From: Dan Milstein [ mailto:[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>
> ]
> > Sent: Tuesday, March 06, 2001 12:00 PM
> > To: [EMAIL PROTECTED]
> > Subject: Re: FW: problem w/ ajp13 - if Tomcat is shutdown
> >
> >
> > What version of TC are you using?  What version of Apache?
> >
> > I would look into the mod_jk docs -- I think this is the
> > spec'd behavior
> > (which, admittedly, is not great, but that makes it more of
> a feature
> > request than a bug ;-).  With ajp13, Apache opens up a
> > persistent TCP/IP
> > connection TC -- if TC restarts, I think that connection may
> > just hang up
> > and then timeout (since Apache doesn't know that TC has restarted).
> >
> > If anyone wants to work on this, you would have the undying
> > thanks of the
> > rest of the TC community -- having to restart Apache all the
> > time bugs a
> > *lot* of people.
> >
> > -Dan
> >
> > > Shinta Tjio wrote:
> > >
> > > I'm having problem with mod_jk if ajp13 is used.
> > >
> > > The problem is often reproduced when Tomcat is shut
> > > down without Apache being shut down. When a request
> > > is fired through Apache as soon as Tomcat starts,
> > > I often get Internal Server Error. The mod_jk.log
> > > will have the following:
> > >
> > > > [jk_uri_worker_map.c (344)]: Into
> > jk_uri_worker_map_t::map_uri_to_worker
> > >
> > > > [jk_uri_worker_map.c (406)]:
> > jk_uri_worker_map_t::map_uri_to_worker,
> > > >   Found a match ajp13
> > > > [jk_worker.c (123)]: Into wc_get_worker_for_name ajp13
> > > > [jk_worker.c (127)]: wc_get_worker_for_name, done 
> found a worker
> > > > [jk_ajp13_worker.c (651)]: Into jk_worker_t::get_endpoint
> > > > [jk_ajp13_worker.c (536)]: Into jk_endpoint_t::service
> > > > [jk_ajp13.c (346)]: Into ajp13_marshal_into_msgb
> > > > [jk_ajp13.c (480)]: ajp13_marshal_into_msgb - Done
> > > > [jk_ajp13_worker.c (203)]: connection_tcp_get_message: Error -
> > > >    jk_tcp_socket_recvfull failed
> > > > [jk_ajp13_worker.c (619)]: Error reading request
> > > > [jk_ajp13_worker.c (489)]: Into jk_endpoint_t::done
> > >
> > > If I hit reload multiple times, eventually Tomcat will
> > > serve the servlet fine.
> > >
> > > Did anyone see this problem before? Is there anyway
> > > around this?
> > >
> > > shinta
> >
> > --
> >
> > Dan Milstein // [EMAIL PROTECTED]
> >
>

 

server.xml

workers.properties

httpd.conf

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to