随着时间的推移,部署在 glassfish 服务器上的 jruby web 应用程序变得缓慢

随着时间的推移,部署在 glassfish 服务器上的 jruby web 应用程序变得缓慢

我已经在glassfish服务器上部署了我的jruby应用程序的war文件。我注意到我的应用程序随着时间的推移变得很慢。我的服务器有30GB的RAM,但应用程序仍然很慢。

我的应用程序中的每个 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

我建议在生产环境中使用 -server 选项设置 Xms16G Xms16G。需要一些指标来帮助识别问题,当服务器开始变慢时提供以下信息:

Java 进程的系统内存(顶部的 RSS)

PermGen 大小(使用 jmc 或 jvisualm)

CodeCahe 大小(使用 jmc):可能该问题还打印最大大小(java -XX:+PrintFlagsFinal | grep ReservedCodeCacheSize)。

相关内容