On 2/25/2016 2:06 PM, Fuad Efendi wrote:
> The best practice: do not ever try to catch Throwable or its descendants 
> Error, VirtualMachineError, OutOfMemoryError, and etc. 
>
> Never ever.
>
> Also, do not swallow InterruptedException in a loop.
>
> Few simple rules to avoid hanging application. If we follow these, there will 
> be no question "what is the best way to stop Solr when it gets in OOM” (or 
> just becomes irresponsive because of swallowed exceptions)

As I understand from SOLR-8539, if an OOM is thrown by a Java program
and there is a properly configured OOM script, regardless of what
happens with exception rewrapping, the script *should* kick in.  Here's
an issue where this behavior was verified by a Jetty developer on a
small-scale test program which catches and swallows the OOM:

https://issues.apache.org/jira/browse/SOLR-8539

Solr 5.x, when started on Linux/UNIX systems with the included shell
scripts, comes default with an "oom killer" script that is supposed to
stop Solr when OOM occurs.

Recently it was discovered that the OnOutOfMemoryError option in the
start script for Linux/UNIX was being incorrectly specified on the
command line -- it doesn't actually work.  Here's the issue for that
problem:

https://issues.apache.org/jira/browse/SOLR-8145

The fix for the incorrect OnOutOfMemoryError usage will be in version
6.0 when that version is finally released, which I think will make the
OOM killer actually work on Linux/UNIX.  There is currently no concrete
information on when 6.0 is expected.  If any plans for future 5.x
versions come up, that fix will likely make it into those versions as well.

There is no OOM killer script for Windows, so this feature is not
present when running on Windows.  If somebody can come up with a way for
Windows to find and kill the Solr process, I'd be happy to include it.

Thanks,
Shawn

Reply via email to