Java的Tomcat 7容器上的heapsize和其他内存configuration
我使用的是一个红帽tomcat7容器(与Docker集线器上的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
所以我想调查最大的heapsize和其他内存设置:
命令:
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产品或产品的含义是什么?
- 最大heapsize = java或你的应用程序或整个tomcat的最大内存消耗量? 因为经过一番调查,我发现这个容器比1892 MB(19839 …)的内存要
outofmemory
。
Tomcat应该为所有应用程序使用单个JVM。 这确实使用1892 MB(1983905792 B / 1024 2 ),这里的问题可能是:
- 你有一个内存泄漏 – 你正在保持对你正在使用的对象的引用,他们正在造成你的虚拟机无法释放内存与垃圾回收。 在这里解释好得多。 尝试通过查看
jmap -histo <javaPID>
的输出来确定发生这种情况的原因 - 你的应用程序运行正常,你确实需要更多的堆内存。 你可以通过设置
set CATALINA_OPTS= -Xmx2g
来增加内存
尽pipe你的问题并没有真正解决你的问题,正如@Razvan所做的那样:
pd产品或产品的含义是什么? [在PrintFlagsFinal中]
这意味着该标志可用于“产品”(发布)构build,而不是那些用于开发,质量保证,诊断或实验的构build。 “pd”表示依赖于平台(Solaris vs Linux vs Windows等)。
最大heapsize = java或你的应用程序或整个tomcat的最大内存消耗量? 因为经过一番调查,我发现这个容器比1892 MB(19839 …)的内存要多得多。
正在运行的Java进程使用内存来处理堆以外的许多事情。 如果您在任何操作系统上安装了完整的JDK,您可以在Linux上使用/proc/$pid/maps
或者使用jmap
(默认格式)
-
JVM本身的代码,包括解释器和JIT编译器HotSpot,以及各种库,加上通过JNI或JNA访问的任何“本地”代码和“本地”数据。 一般而言,代码可能会与其他进程共享,但是我不确定这是否在docker容器中保持为真。
-
'Metaspace'(在Java 8中,在早期版本中是'PermGen')和'CodeCache',它们包含加载的类和它们的JITted代码
-
线程堆栈; Tomcat使用了相当多的线程,即使Java代码不行,JVM也有一些内置线程和本地线程
-
'直接'NIO缓冲区如果使用(我认为Tomcat至less有时)
但只有堆中的物体被垃圾收集,所以其他区域与GC失败无关。
另外,我不确定docker记忆测量是否包含stream程本身之外的任何内容。 你可能会比较top
或ps -F
。