Назад | Перейти на главную страницу

Использование памяти Tomcat Solr

Я запускаю solr на сервере tomcat на сервере linux, когда я использую верхнюю команду, я вижу "VIRT" очень высоким

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 4786 root      20   0 19.6g 3.8g  10m S  200 15.9   8:26.13 java
 1808 root      20   0 6437m 162m 4740 S    2  0.7 101:08.75 java
 4889 root      20   0 19352 1580 1064 R    1  0.0   0:00.08 top
31700 mysql     20   0 6677m 5.2g 4468 S    0 22.0 470:51.49 mysqld
    1 root      20   0 23708 1464  972 S    0  0.0   0:23.06 init

В чем может быть причина этого или как я могу это профилировать?

Причина, по которой вы наблюдаете такое высокое использование виртуальной памяти, заключается в том, что Solr использует MMapFSDirectory в качестве класса по умолчанию для управления индексом Lucene. Этот класс будет пытаться сопоставить любые индексы под управлением Solr с виртуальной памятью - чем больше ядер / индексов, тем хуже. Самое интересное, что это находится за пределами знаний / контроля JVM. JVM будет сообщать только о (-Xms: 128m -Xmx: 1024m в качестве примера) минимальной / максимальной памяти, которую вы указываете для своего контейнера сервлета. Было бы неплохо, если бы они предупредили людей или использовали более консервативный каталог Factory по умолчанию.

Измените строку в вашем solrconfig.xml:

directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"

чтобы вместо этого указать на что-то вроде NIOFSDirectoryFactory.