Приложения для веб-карт увеличивают объем памяти в куче JAVA

#java #tomcat #heap-memory #geoserver #wms

#java #tomcat #куча-память #геосервер #wms

Вопрос:

Проблема

Настройка: мы создали приложение, в основном созданное на стороне сервера. Компонентами являются Postgres/Postgis (9,4 64-битный) и экземпляр Geoserver (2.8.5). Программное обеспечение работает на Ubuntu 16 64-разрядной ОС.

Введение: Геосервер публикует растровые данные, поступающие из локального хранилища размером около 5-10 КБ, в качестве службы WMS, а данные объектов из базы данных Postgis — в качестве службы WFS (максимум 30000 объектов на слой). На стороне клиента мы используем листовку для отображения веб-карты. У нас есть функция, которая извлекает текущий BBOX карты и проверяет через REST API, какой слой на Геосервере попадает в этот BBOX. Теперь отображаются слои, которые можно включать или выключать.

При этом объем памяти в куче нашего сервера tomcat 8 увеличивается и достигает почти 100% рабочей нагрузки, что более или менее останавливает машину. Приложение можно использовать снова, только после того, как память в куче была очищена либо Геосервером (в разделе состояние сервера в меню администрирования), либо автоматически сборщиком мусора JAVA.

Вопрос

Во-первых, почему так много используется памяти, хотя растровые изображения не такие большие по размеру?

Во-вторых, есть ли возможность каким-либо образом очистить память кучи в программе JAVA или из командной строки, если мы не можем выяснить, что увеличивает пространство кучи.

Комментарии:

1. System.gc(); Но вы должны действительно выяснить, почему он (временно) использует всю память, потому что запуск сборки мусора приведет к паузам, что означает, что ваш сервис не сможет обрабатывать / принимать запросы в течение этого времени.

2. GeoServer — это платформа для запуска ряда плагинов. Похоже, что в компонентах, подключающихся к PostGIS или обслуживающих растровые данные, может быть утечка памяти. Можете ли вы попробовать запустить свое веб-приложение только с векторными данными, а затем только с растровыми данными? Если одна или другая причина вызывает проблему, это может помочь определить проблему.

3. сколько памяти кучи вы предоставили JVM tomcat по умолчанию, будет слишком мало для выживания GeoServer. docs.geoserver.org/latest/en/user/production/container.html

4. @cello @GeoMesaJim @iant Спасибо за ответы до сих пор! System.gc() довольно опасно и, следовательно, не подходит для нашей системы. Мы предоставили tomcat jvm 8 ГБ. Я думаю, этого уже более чем достаточно. Растры, которые мы обслуживаем, хранятся на жестком диске в каталоге данных geoserver. В таблице PostGIS хранятся только векторные данные, которые содержат от 1000 до 25000 объектов, которые будут включены в веб-приложение как wfs, извлекающее данные с геосервера как geojson!