Веб-приложение jruby, развернутое на сервере Glassfish, со временем замедляется
Я развернул файл war моего приложения jruby на сервере Glassfish. я заметил, что мое приложение становится медленным с течением времени. Мой сервер имеет 30 ГБ ОЗУ, но приложение работает очень медленно.
Каждый метод ruby в моем приложении создает массив, который содержит около 1 миллиона записей. Я думаю, что создание такого большого массива вызывает проблемы с памятью и, следовательно, приложение становится медленным. если это так, то какую настройку можно выполнить, чтобы избежать такой проблемы с памятью.
Ниже мои настройки памяти для Java
uintx AdaptivePermSizeWeight = 20 {product}
intx CompilerThreadStackSize = 0 {pd product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx HeapSizePerGCThread = 87241520 {product}
uintx InitialHeapSize := 1055640320 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 16890462208 {product}
uintx MaxPermSize = 174063616 {pd product}
uintx PermSize = 21757952 {pd product}
intx ThreadStackSize = 1024 {pd product}
intx VMThreadStackSize = 1024 {pd product}
java version "1.7.0_101"
OpenJDK Runtime Environment (IcedTea 2.6.6) (7u101-2.6.6-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
Спасибо
1 ответ
Я рекомендую установить Xms16G Xms16G с параметром -server для производственной среды. Некоторые метрики необходимы, чтобы помочь идентифицировать проблему, предоставьте эту информацию, когда сервер начинает работать медленно:
Системная память для процессов Java (RSS сверху)
Размер PermGen (используйте jmc или jvisualm)
Размер CodeCahe (используйте jmc): возможно, проблема также в том, что вы печатаете максимальный размер (java -XX:+PrintFlagsFinal | grep ReservedCodeCacheSize).