2012-03-15 3 views
2

Solr выделяет исключение из памяти. Размер индекса небольшой примерно около 30 ГБ. Полное индексирование завершено отлично. Позже, когда вы, возможно, пытаетесь загрузить результаты в память, он начинает давать это исключение. Хотя с той же памятью, выделенной Tomcat, и точно такой же конфигурацией конфигурации solr на другом сервере, она работает отлично. Я работаю над 64-битным программным обеспечением, включая Java & Tomcat в Windows. С меньшим размером индекса он работает отлично. Я думал о том, чтобы увеличить выделение кучи tomcat, но потом, как на другом сервере с точно такой же конфигурацией системы и solr, он работает нормально? Любая помощь будет оценена по достоинству.Solr Исключение из памяти

Вот журналы:..

Сервер обнаружил внутреннюю ошибку (серьезные ошибки в конфигурации Solr Проверьте файлы журналов для получения более подробной информации о том, что может быть неправильно Если вы хотите Solr продолжать после ошибок конфигурации, change: false in null --------------------------------------------- ---------------- java.lang.RuntimeException: java.lang.OutOfMemoryError: Java куча пространства в org.apache.solr.core.SolrCore.getSearcher (SolrCore.java:1068) на org.apache.solr.core.SolrCore. (SolrCore.java:579) на org.apache.solr.core.CoreContainer $ Initializer.initialize (CoreContainer.java:137) на org.apache.solr.servlet.SolrDispatchFilter. init (SolrDispatchFilter.java:83) в org.apache.catalina.core.ApplicationFilterConfig.getFilter (ApplicationFilterConfig.java : 295) в org.apache.catalina.core.ApplicationFilterConfig.setFilterDef (ApplicationFilterConfig.java:422) в org.apache.catalina.core.ApplicationFilterConfig. (ApplicationFilterConfig.java:115) в org.apache.catalina.core.StandardContext .filterStart (StandardContext.java:4072) в org.apache.catalina.core.StandardContext.start (StandardContext.java:4726) в org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:799) в org. apache.catalina.core.ContainerBase.addChild (ContainerBase.java:779) в org.apache.catalina.core.StandardHost.addChild (StandardHost.java:601) в org.apache.catalina.startup.HostConfig.deployWAR (HostConfig. java: 943) на org.apache.catalina.startup.HostConfig.deployWARs (HostConfig.java:778) на org.apache.catalina.startup.HostConfig.deployApps (HostConfig.java:504) на org.apache.catalina.startup .HostConfig.start (HostConfig.java:1317) на org.apache.catalina.startup.HostConfig.lifecycleEvent (HostConfig.java:324) на org.apache.catalina.util.LifecycleSupport.fir eLifecycleEvent (LifecycleSupport.java:142) на org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1065) на org.apache.catalina.core.StandardHost.start (StandardHost.java:840) на org.apache .catalina.core.ContainerBase.start (ContainerBase.java:1057) на org.apache.catalina.core.StandardEngine.start (StandardEngine.java:463) на org.apache.catalina.core.StandardService.start (StandardService.java : 525) на org.apache.catalina.core.StandardServer.start (StandardServer.java:754) на org.apache.catalina.startup.Catalina.start (Catalina.java:595) на sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) на sun.reflect.NativeMethodAccessorImpl.invoke (Неизвестный источник) на sun.reflect.DelegatingMethodAccessorImpl.invoke (Неизвестный источник) в java.lang.reflect.Method.invoke (Неизвестный источник) в org.apache.catalina.startup. Bootstrap.start (Bootstrap.java:289) на org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:414) Вызвано: java.lang.OutOfMemoryError: куча Java-кучи на org.apache.lucene .index.SegmentTermEnum.termInfo (SegmentTermEnum.java:180) в org.apache.lucene.index.TermInfosReader. (TermInfosReader.java:91) в org.apache.lucene.index.SegmentReader $ CoreReaders. (SegmentReader.java:122) в org.apache.lucene.index.SegmentReader.get (SegmentReader.java:652) в org.apache.lucene.index.SegmentReader.get (SegmentReader.java:613) в org.apache.lucene.index.DirectoryReader. (DirectoryReader.java:104) в org.apache.lucene.index.ReadOnlyDirectoryReader. (ReadOnlyDirectoryReader.java:27) в org.apache.lucene.index.DirectoryReader $ 1.doBody (DirectoryReader.java:74) в org.apache. lucene.index.SegmentInfos $ FindSegmentsFile.run (SegmentInfos.java:683) в org.apache.lucene.index.DirectoryReader.open (DirectoryReader.java:69) в org.apache.lucene.index.IndexReader.open (IndexReader. java: 476) в org.apache.lucene.index.IndexReader.open (IndexReader.java:403) на org.apache.solr.core.StandardIndexReaderFactory.newReader (StandardIndexReaderFactory.java:38) на org.apache.solr.core .SolrCore.getSea rcher (SolrCore.java:1057) в org.apache.solr.core.SolrCore. (SolrCore.java:579) в org.apache.solr.core.CoreContainer $ Инициализатор.инициализировать (CoreContainer.java:137) в org.apache.solr.servlet.SolrDispatchFilter.init (SolrDispatchFilter.java:83) в org.apache.catalina.core.ApplicationFilterConfig.getFilter (ApplicationFilterConfig.java:295) в org.apache .catalina.core.ApplicationFilterConfig.setFilterDef (ApplicationFilterConfig.java:422) в org.apache.catalina.core.ApplicationFilterConfig. (ApplicationFilterConfig.java:115) в org.apache.catalina.core.StandardContext.filterStart (StandardContext.java: 4072) на org.apache.catalina.core.StandardContext.start (StandardContext.java:4726) на org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:799) на org.apache.catalina.core.ContainerBase .addChild (ContainerBase.java:779) в org.apache.catalina.core.StandardHost.addChild (StandardHost.java:601) в org.apache.catalina.startup.HostConfig.deployWAR (HostConfig.java:943) в org. apache.catalina.startup.HostConfig.deployWARs (HostConfig.java:778) в org.apache.catalina.startup.HostConfig.deployApps (HostConfig.ja va: 504) на org.apache.catalina.startup.HostConfig.start (HostConfig.java:1317) на org.apache.catalina.startup.HostConfig.lifecycleEvent (HostConfig.java:324) на org.apache.catalina.util .LifecycleSupport.fireLifecycleEvent (LifecycleSupport.java:142) на org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1065)), который помешал ему выполнить этот запрос.

ответ

1

Когда я запускаю Tomcat в качестве сервиса, он почему-то не рассматривает CATALINA_OPTS как переменную окружения, однако все в порядке, если Я запускаю tomcat в консоли/командной строке, используя startup.bat. Я задал еще один вопрос для моей последующей проблемы: Tomcat as a service v/s Tomcat on console for 64 bit Windows

2

Я думаю, вы должны это лечение так же, как и любой другой проблемы OOME:

  • Это может быть, что ваше приложение просто нужно немного больше памяти - FIX: увеличить максимальный размер кучи с помощью виртуальной машины Java -Xmx вариант.

  • Возможно, ваше приложение имеет утечку памяти. (Возможно, в Solr или, возможно, в вашем коде.) - Fix: используйте профайлер памяти, чтобы идентифицировать утечку и исправить ее.


... but then how come on a different server with exactly same system and solr configuration it is working fine?

Ясно, что они не совпадают. Что-то другое, но вы не можете понять, что это такое. (Но я не думаю, что это выясняет, какая разница - хороший способ решить проблему.)

+0

Спасибо, Стефан. На самом деле проблема связана с запуском Tomcat как службы. Я отправлю еще один вопрос. – Yavar

0

Сколько у вас на этом сервере более 30 ГБ ОЗУ?

В любом случае, вы изучили RSS для процесса SOLR в top? Запустите команду top, затем нажмите M (столица M), чтобы отсортировать процессы по использованию памяти. Просмотрите столбец Resident Set, чтобы узнать, сколько SOLR используется при загрузке данных, попробуйте различные запросы и запустите optimize с различными номерами для maxSegments. Начните с большего числа и работайте вниз примерно на половину или одну треть за раз. Если вы можете получить его до 3 сегментов, которые разумны в базе данных, которая регулярно получает новые обновления.

Подробнее о оптимизируют здесь: http://wiki.apache.org/solr/UpdateXmlMessages#A.22commit.22_and_.22optimize.22

0

ли оба сервера имеют одинаковый профиль перезапуска приложения?

Недавно я столкнулся с проблемой, когда клиентское приложение, использующее SOLR, запускало загрузчики классов в приложении, потому что MultiThreadedHttpClientManager в клиентской библиотеке SOLR запускает ReferenceQueueThread, и если это явно не завершено, загрузчик классов приложений будет закреплен, он исправляется через перезагрузки.

Обходным путем для этого условия является добавление ServletContextListener, который вызывает MultiThreadedHttpClientManager.shutdownAll() при уничтожении.

Смежные вопросы