Я запускаю 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.