Я развернул военный файл своего приложения 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)
Спасибо
Я рекомендую установить Xms16G Xms16G с параметром -server для производственной среды. Некоторые показатели необходимы, чтобы помочь идентифицировать проблему, предоставить эту информацию, когда сервер начинает замедляться:
Системная память для процессов Java (RSS вверху)
Размер PermGen (используйте jmc или jvisualm)
Размер CodeCahe (используйте jmc): возможно, проблема также связана с максимальным размером печати (java -XX: + PrintFlagsFinal | grep ReservedCodeCacheSize).