Re: How do you catch these exceptions

2014-11-01 Thread Konstantin Kolinko
2014-11-01 3:57 GMT+03:00 Campbell, Lance la...@illinois.edu:

 Tomcat 7.0.56

 Java 7.0_72



 I received the below Tomcat error messages in a web application.  Is there a 
 way for me to catch these exceptions so that I can then either execute Java 
 code or trigger a Linux shell script?



 Oct 31, 2014 7:38:25 PM 
 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor doRun

 SEVERE:

 java.lang.OutOfMemoryError: Java heap space



 Oct 31, 2014 7:38:46 PM org.apache.tomcat.util.net.NioEndpoint$Acceptor run

 SEVERE:

 java.lang.OutOfMemoryError: Java heap space



 Oct 31, 2014 7:38:49 PM org.apache.tomcat.util.net.NioEndpoint$Poller run


 Thanks,

There is a family of options such as -XX:OnOutOfMemoryError,
-XX:+HeapDumpOnOutOfMemoryError in Oracle Java. The first one is used
to launch an external script in case of OOM.

Doing anything from Java rarely works in case of an OOM error,
especially a PermGen OOM. (You have a bit more luck with your Java
heap space one).

See
http://markmail.org/message/rr26epg4oap4syus
Notification strategy for OutOfMemoryError
thread from about a year ago.

Best regards,
Konstantin Kolinko

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



Re: How do you catch these exceptions

2014-11-01 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Konstantin,

On 11/1/14 8:59 AM, Konstantin Kolinko wrote:
 2014-11-01 3:57 GMT+03:00 Campbell, Lance la...@illinois.edu:
 
 Tomcat 7.0.56
 
 Java 7.0_72
 
 
 
 I received the below Tomcat error messages in a web application.
 Is there a way for me to catch these exceptions so that I can
 then either execute Java code or trigger a Linux shell script?
 
 
 
 Oct 31, 2014 7:38:25 PM
 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor doRun
 
 SEVERE:
 
 java.lang.OutOfMemoryError: Java heap space
 
 
 
 Oct 31, 2014 7:38:46 PM
 org.apache.tomcat.util.net.NioEndpoint$Acceptor run
 
 SEVERE:
 
 java.lang.OutOfMemoryError: Java heap space
 
 
 
 Oct 31, 2014 7:38:49 PM
 org.apache.tomcat.util.net.NioEndpoint$Poller run
 
 
 Thanks,
 
 There is a family of options such as -XX:OnOutOfMemoryError, 
 -XX:+HeapDumpOnOutOfMemoryError in Oracle Java. The first one is
 used to launch an external script in case of OOM.
 
 Doing anything from Java rarely works in case of an OOM error, 
 especially a PermGen OOM. (You have a bit more luck with your
 Java heap space one).
 
 See http://markmail.org/message/rr26epg4oap4syus Notification
 strategy for OutOfMemoryError thread from about a year ago.

+1

My experience is that, of the options available, the
- -XX:OnOutOfMemoryError option is the most reliable.

However.

Since I've been using that technique, there have been plenty of times
where I've found an OOME condition (shown in catalina.out, for
instance) and the JVM has actually not executed my external script.

YMMV

I've also implemented a Filter that catches OutOfMemoryError and
attempts to log the condition. I have very little data about how often
it actually runs, but it definitely does run sometimes: it helped us
find a runaway-search bug that happened in a mundane part of our web
application, because we were able to see the query string being sent
by the remote user.

The Filter basically just wraps a try/catch block around
chain.doFilter(...) with this as the exception handler:

catch (OutOfMemoryError oome)
{
logger.error(Detected OutOfMemory condition during request);
logger.error(Here are some request details:);
logger.error(Next line will contain the current request's
URI);
logger.error(request.getRequestURI());
logger.error(Next line will contain the current request's
query string (if any):);
logger.error(request.getQueryString());
logger.error(Next line will contain the original
request's URI (essentially what the client actually requested));

logger.error(request.getAttribute(javax.servlet.forward.request_uri));
logger.error(Next line will contain the original
request's query string (if any):);

logger.error(request.getAttribute(javax.servlet.forward.query_string));
logger.error(Finally, the current user (if any):);
logger.error((null != request.getSession(false)
 null !=
request.getSession(false).getAttribute(user)
? request.getSession(false).getAttribute(user)
: no current user));

_application.setAttribute(OOME_KEY,  Boolean.TRUE);

throw oome;
}

Note that, other that whatever overhead the logger itself adds, there
are no memory allocations that occur in the exception handler itself.

Hope that helps,
- -chris
-BEGIN PGP SIGNATURE-
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org

iQIcBAEBCAAGBQJUVWkXAAoJEBzwKT+lPKRYvB4P/3WdCT2RZ5cc32vnLGelOURw
pxFq5QJeNLru6elAStNOJPuWVJ3m4lmK45juhdrMKJp69fuB+bK7raUF7Ekc3ISh
1s7GGb9S0McKuI8Hfrdzp/NzGMdbMDCGJZzqyEqqeuRrKCZ5F2SRwD1mbT59gIr0
Tqe69CsmAmWnIq47iCV++KhPvmwEnROwTrbjjIXi3UpdYskEtnX8tHPAFWHZZZrj
3bVSPH7UokoBMkAja4nM8hYpHK+7f8lGHve98EQlTi6oU00Cfv6w9VhMZ9N0WfE+
T/f7+OgGyD4gkQ/pReebd4ri1aPyBApfnk4ApgFA3/g057u5scsV+zKIsWxycllF
f6Eo6RS8zaAbcaX1mUmF9XgdyV49WYW+lkbF2NmqQRBqe4C4mXRa4pgGzTLauBcD
/EmPvgZCluTDiV4pzshEtHmzEXKptzIPs5oRWswmKZcxntKeUi8hW6/QIlzGl8PV
f1VCX3/j/qUBo2rzZird3KJd7thTgdl0SLLlapMCP8LFoiMxm4q2urQdT9G/sWxR
u7jYgfbSAUM6Wn3Z0XA2yc9BEFIbrOEUwYQYkJ3Zw4jbLTWqdIiYw0bgEkBlzewF
JRJUU75jvJE27qto6iBvIWdvTh66gtHNpQw2nXN4LLEdVMvSI+77f7AsDgILT67x
d0lLQjlmlIwIGOxFW7nD
=LN4V
-END PGP SIGNATURE-

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



How do you catch these exceptions

2014-10-31 Thread Campbell, Lance
Tomcat 7.0.56
Java 7.0_72

I received the below Tomcat error messages in a web application.  Is there a 
way for me to catch these exceptions so that I can then either execute Java 
code or trigger a Linux shell script?

Oct 31, 2014 7:38:25 PM org.apache.tomcat.util.net.NioEndpoint$SocketProcessor 
doRun
SEVERE:
java.lang.OutOfMemoryError: Java heap space

Oct 31, 2014 7:38:46 PM org.apache.tomcat.util.net.NioEndpoint$Acceptor run
SEVERE:
java.lang.OutOfMemoryError: Java heap space

Oct 31, 2014 7:38:49 PM org.apache.tomcat.util.net.NioEndpoint$Poller run


Thanks,

Lance Campbellhttp://illinois.edu/person/lance
Software Architect
Web Services at Public Affairs
217-333-0382
[University of Illinois at Urbana-Champaign logo]http://illinois.edu/