эти проблемы JDK также исправлены в 1.6.9_29 (не только 1.7.0u1).ReadVInt больше не может аварийно завершить работу.Таким образом, ваш сбой не связан ни с одной из «известных ошибок java6 / 7» (ошибка vint вообще не приводит к сбою вашей JVM, она просто повреждает ваш индекс, возвращая неправильные значения - и эта ошибка определенно исправлена с Lucene 3.1).
Но есть еще один шанс, что вы можете разбить JVM: вы работаете на 64-битной платформе (Linux), поэтому реализация каталога по умолчанию - MMapDirectory.Lucene использует хак, чтобы иметь возможность отображать сопоставленные файлы из виртуального адресного пространства.Это не разрешено самой JVM, но делает удаление карт зависимым от сборщика мусора, что является проблемой для Lucene.По умолчанию MMapDirectory отображает файлы после закрытия IndexInputs.MMapDirectory вообще не синхронизируется, поэтому, когда другой поток пытается получить доступ к IndexInput после отмены сопоставления, он получит доступ к несопоставленному адресу и будет SIGSEGV.
Если ваш код будет правильным, этого не произойдет, но похоже, что выиспользование уже закрытого IndexReader / IndexWriter для доступа к индексу.До Lucene 3.5 (скоро выйдет), пропущенные проверки в IndexReader сделают возможным, чтобы уже закрытый IndexReader со всеми его закрытыми (и не отображенными) IndexInputs попытался получить доступ к данным индекса и ошибкам сегмента.
В 3.5 мы добавилидополнительные проверки безопасности, чтобы предотвратить этот незаконный доступ, но это не 100% (так как синхронизация отсутствует).Я бы пересмотрел код и проверил, что ничто не обращается к закрытому индексу.
Простая проверка, чтобы убедиться, что это ваша проблема, состоит в том, чтобы использовать NIOFSDirectory (медленнее в Linux) вместо MMapDirectory.Если это не приводит к сбою и, возможно, выдает AlreadyClosedExceptions, ошибка заключается в доступе к закрытым индексам.