lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Uwe Schindler (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LUCENE-5673) MmapDirectory shouldn't pass along OOM wrapped as IOException
Date Fri, 16 May 2014 11:24:29 GMT

    [ https://issues.apache.org/jira/browse/LUCENE-5673?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13998678#comment-13998678
] 

Uwe Schindler commented on LUCENE-5673:
---------------------------------------

Hi,
this is indeed a problem. The existence of the OOM somewhere in the stack trace confuses users,
because whenever they see OOM, they start to raise -Xmx and by that make the problem worse.
The behaviour is correct from the API, because the javadocs of FileChannel.map specify that
it throws IOException when mapping fails. But the implementation in OpenJDK is bullshit:
We should do something like this:

{code:java}
...catch (IOException ioe) {
  if (ioe.getCause() instanceof OutOfMemoryError) {
    throw new IOException("Memory mapping failed. There might not be enough unfragmented address
space available to mmap the index file: " + ioe.getCause().getMessage()); // without root
cause!!!
  }
  throw ioe;
}
{code}

By that the user just gets a good IOException not referring to OOM.

Indeed the OOM is the real bug, because its caused by OutOfAddressSpaceError and not OutOfMemoryError
:-)

> MmapDirectory shouldn't pass along OOM wrapped as IOException
> -------------------------------------------------------------
>
>                 Key: LUCENE-5673
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5673
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Robert Muir
>         Attachments: LUCENE-5673.patch
>
>
> The bug here is in java (not MMapDir), but i think we shoudl do something.
> Users get confused when they configure their JVM to trigger something on OOM, and then
see "OutOfMemoryError: Map Failed": but their trigger doesnt fire.
> Thats because in the jdk, when it maps files it catches OutOfMemoryError, asks for a
garbage collection, sleeps for 100 milliseconds, then tries to map again. if it fails a second
time it wraps the OOM in a generic IOException.
> I think we should add a try/catch to our filechannel.map



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org


Mime
View raw message