tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <ch...@christopherschultz.net>
Subject Re: Procrun and Tomcat service/OS shutdown on Windows
Date Fri, 15 Mar 2013 19:36:37 GMT
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Steve,

On 3/14/13 1:21 PM, Thomas, Steve wrote:
> Thanks, Jeffrey.  That may be a possibility for the long-term.
> --Steve

Did you read Jeffrey's entire reply? He started by top-posting, but
then wrote some much more informative comments at the end of his post.

- -chris

> 
> -----Original Message----- From: Harris, Jeffrey E.
> [mailto:Jeffrey.Harris@ManTech.com] Sent: Thursday, March 14, 2013
> 12:52 PM To: Tomcat Users List Subject: RE: Procrun and Tomcat
> service/OS shutdown on Windows
> 
> Edit the registry so Tomcat depends on the HSQLDB shutdown.  This
> only works if HSQLDB is also started as a service.
> 
> Jeffrey Harris
> 
>> -----Original Message----- From: Thomas, Steve
>> [mailto:sthomas@vocollect.com] Sent: Thursday, March 14, 2013
>> 12:00 PM To: users@tomcat.apache.org Subject: Procrun and Tomcat
>> service/OS shutdown on Windows
>> 
>> Hi -
>> 
>> Running Tomcat 7.0.23 or 7.0.37 (32 or 64-bit) installed as a
>> service (either via service.bat or the exe installer) on a
>> Windows 7 64-bit OS, we are seeing an issue where the Windows
>> shutdown kills Tomcat before our webapp shutdown sequence has
>> time to execute fully. (Specifically, we just want to make sure
>> our instance of HSQLDB shuts down correctly, otherwise corruption
>> can ensue.)
>> 
>> Details:
>> 
>> Initially we were running with 32-bit Tomcat 7.0.23 and saw that
>> our shutdown sequence was not being logged at all when one of our
>>  customers shut down his laptop.  It looked like the process was
>> just being killed.  I found a commons-daemon/procrun bug and
>> corresponding fix that seemed like it should address the issue,
>> namely
>> 
>> http://stackoverflow.com/questions/13578196/how-to-gracefully-shutdown
>>
>> 
- -
>> procrun/14150785#14150785
>> 
>> https://issues.apache.org/jira/browse/DAEMON-274
>> 
>> I subsequently upgraded Tomcat to 7.0.36 (32-bit, zip) to get the
>>  updated commons-daemon (http://tomcat.apache.org/tomcat-7.0- 
>> doc/changelog.html), but to no avail.  I thought perhaps the
>> 32-bit Tomcat/64-bit OS might be a disconnect, so I installed the
>> 64-bit version, but got the same result.  In short, it looks like
>> we're either doing something wrong with our code, or there's a
>> new wrinkle in the OS-service handshaking, or the bug wasn't
>> fixed correctly...maybe in that order.
>> 
>> Details below on how our code manifested the problem as well as
>> other steps to reproduce.
>> 
>> Our database shutdown code is located in the destroy() function
>> of a class implementing
>> org.springframework.beans.factory.DisposableBean. I added a
>> Thread.sleep(5 min) call to reproduce it on my machine.  As long
>> as I shut down the service through the Services panel on Windows,
>>  the shutdown sequence fully executes (and takes 5 min, as
>> expected). But if I just shut down Windows, the sequence is
>> interrupted.
>> 
>> (As an aside, I don't expect the shutdown to take anywhere near
>> that long in practice, but wanted to make sure the problem
>> manifested itself so that I could address the bug.  We are seeing
>> this with a decent customer test machine, but I can't reproduce
>> it on my machine w/o changes.)
>> 
>> Thinking it might be Spring, I moved the shutdown delay to a 
>> ServletContextListener. contextDestroyed() method.  Same effect.
>> 
>> I moved the delay again, and reproduced the same problem in a 
>> standalone servlet that overrides HttpServlet.destroy().  I've
>> posted the code at the link below:
>> 
>> http://pastebin.com/yYgrQ2sE
>> 
>> This is the output recorded in the stdout log file for an OS
>> shutdown, and then a shutdown of the service by hand.  We, of
>> course, favor the second. :-)
>> 
>> 2013-03-14 10:05:40 Commons Daemon procrun stdout initialized 
>> StatusServlet.init() Entering StatusServlet.destroy() Simulating
>> long shutdown sequence.
>> 
>> 2013-03-14 10:12:29 Commons Daemon procrun stdout initialized 
>> StatusServlet.init() Entering StatusServlet.destroy() Simulating
>> long shutdown sequence. Simulation complete--sequence finished. 
>> Exiting StatusServlet.destroy()
>> 
>> Can we guarantee that Windows won't just kill our Tomcat process
>> and potentially corrupt our database?  That's the question.
>> 
>> I'd be grateful for some help on this.  Thanks for your time and
>>  attention.
>> 
>> Steve T This message is intended only for the named recipient. If
>> you are not the intended recipient, you are notified that
>> disclosing, copying, distributing or taking any action based on
>> the contents of this information is strictly prohibited.
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>>
>> 
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
> 
> Edit the service entry in the registry (under
> HKEY_Local_Machine\system\currentcontrolset\services\<Tomcat
> Service Name>) so Tomcat depends on HSQLDB.  This only works if
> HSQLDB is also started as a service.  If HSQLDB is started some
> other way (i.e., by the Tomcat web app), you can try and install it
> as a service using the srvany utility (or possibly the sc
> utility).
> 
> If you can configure Tomcat to be dependent on HSQLDB, this will
> also force HSQLDB to start before Tomcat.
> 
> There is a method discussed at
> http://blogs.technet.com/b/askperf/archive/2008/02/04/ws2008-service-shutdown-and-crash-handling.aspx
> that you might try.
> 
> Finally you might also want to try delaying the shutdown timer on
> the system to give Tomcat and/or HSQLDB more time to shutdown.  It
> might be possible that it is taking longer than the 12 seconds
> Windows allows by default for a service to shutdown.  That timer
> can be changed at
> HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control
> (WaitToKillServiceTimeout value; the data is in milliseconds).
> However, Windows 7 and Windows Server 2008 R2 need a hotfix to
> change this setting (see http://support.microsoft.com/kb/2549760).
> 
> Jeffrey Harris
> 
> This e-mail and any attachments are intended only for the use of
> the addressee(s) named herein and may contain proprietary
> information. If you are not the intended recipient of this e-mail
> or believe that you received this email in error, please take
> immediate action to notify the sender of the apparent error by
> reply e-mail; permanently delete the e-mail and any attachments
> from your computer; and do not disseminate, distribute, use, or
> copy this message and any attachments.
> 
> ---------------------------------------------------------------------
>
> 
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 
> This message is intended only for the named recipient. If you are
> not the intended recipient, you are notified that disclosing,
> copying, distributing or taking any action based on the contents of
> this information is strictly prohibited.
> 
> 
> ---------------------------------------------------------------------
>
> 
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
Comment: GPGTools - http://gpgtools.org
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iEYEAREIAAYFAlFDeEUACgkQ9CaO5/Lv0PAdiQCgrHcAqArzfODuGUykJJbj3YIx
ZE4AoKg8Ooju4DkHE/Wc74c3lh1NKvci
=ArZV
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message