java - Red Hat Tomcat 7容器上java的Heapsize等内存配置

标签 java tomcat docker heap-memory

我正在使用 Red Hat tomcat7 容器(与 docker hub 上的 tomcat7 非常相似):

registry.access.redhat.com/jboss-webserver-3/webserver30-tomcat7-openshift:1.2-12

我在其中部署了一些 .wars,但在执行大量过程后,我收到以下错误:

GC overhead limit exceeded
java.lang.OutOfMemoryError: GC overhead limit exceeded

所以我想研究最大堆大小和其他内存设置:

命令:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'
Output:
Picked up JAVA_TOOL_OPTIONS: -Duser.home=/home/jboss -Duser.name=jboss          
     intx CompilerThreadStackSize                   = 0                         
          {pd product}                                                          
    uintx ErgoHeapSizeLimit                         = 0                         
          {product}                                                             
    uintx HeapSizePerGCThread                       = 87241520                  
          {product}                                                             
    uintx InitialHeapSize                          = 125829120                 
          {product}                                                             
    uintx LargePageHeapSizeThreshold                = 134217728                 
          {product}                                                             
    uintx MaxHeapSize                               = 1983905792             
          {product}                                                             
     intx ThreadStackSize                           = 1024                      
          {pd product}                                                          
     intx VMThreadStackSize                         = 1024                      
          {pd product}                                                          
openjdk version "1.8.0_91"                                                      
OpenJDK Runtime Environment (build 1.8.0_91-b14)                                
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode) 

我不知道如何解释这些信息。 我考虑过增加堆大小。

  • pd 产品或产品是什么意思?
  • 最大堆大小 = java 或您的应用程序或整个 tomcat 的最大内存消耗吗?因为经过一番调查,我发现容器在出现内存不足问题时使用的内存远多于 1892 MB(19839...)。

最佳答案

Tomcat 应该为所有应用程序使用单个 JVM。这确实使用了 1892 MB ( 1983905792 B/10242 ),这里的问题可能是:

  • 您存在内存泄漏 - 您保留了对正在使用的对象的引用,它们导致您的虚拟机无法通过垃圾回收释放内存。解释得更好here 。 尝试通过查看 jmap -histo <javaPID> 的输出来找出发生这种情况的原因。
  • 您的应用运行正常,您确实需要更多堆内存。您可以通过设置 set CATALINA_OPTS= -Xmx2g 来增加内存。

关于java - Red Hat Tomcat 7容器上java的Heapsize等内存配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37045110/

相关文章:

mysql - 将 SQL 创建数据库文件加载到 Docker

docker-compose 使用 dockerfiles 运行 2 个服务,找不到任务 "phx.server",main.go : no such file or directory

PhpStorm 映射路径

java - android java 从 ImageView 中选择颜色

java - TensorFlow 标签号与轴上的形状不匹配

java - 通过 Java 三元运算符的自动装箱行为引发 NullPointerException

spring - 在 Tomcat 中发送带有附件文件的消息时缺少起始边界异常

java - 指向 env var 的 jboss 缓存位置

java - 单击提交按钮时出现 Http404 错误(Servlet 问题)

java - Selenium - 滚动到嵌套滚动条内的 View 元素