我正在运行tomcat7服务,这会给客户带来很大的负担。我在一个周末离开了应用程序,当我回来时,我注意到tomcat的CPU使用率增加到99%,在日志中我发现了以下错误:
Exception in thread "http-bio-8080-exec-908" java.lang.OutOfMemoryError: Java heap space
Exception in thread "http-bio-8080-exec-948" java.lang.OutOfMemoryError: Java heap space
这是否意味着当我有OutOfMemory异常时,我有908和948打开活动线程?
目前我的tomcat在默认配置下运行我还没有增加堆大小。
我们收到200 queries/sec
左右。
My hardware:
CPU : Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
Memory: 2GB
请你指出我正确的方向,我应该看看为了解决这个问题。
感谢您的帮助!
答案 0 :(得分:0)
当您的JVM用完特定资源时,会发生java.lang.OutOfMemoryError: Java heap space
错误。
解决方案1:您应该增加该资源的可用性。当您的应用程序没有足够的Java堆空间内存来正常运行时。为此,您需要更改JVM启动配置并添加以下内容:
-Xmx1024m
上面的配置将为应用程序提供1024MB的Java堆空间。您可以使用g或G表示GB,m或M表示MB,k或K表示KB。例如,以下所有内容相当于说最大Java堆空间为1GB:
-Xmx1073741824
-Xmx1048576k
-Xmx1024m
-Xmx1g
解决方案2:如果您的应用程序包含内存泄漏,则添加更多堆只会推迟java.lang.OutOfMemoryError:Java堆空间错误。
如果您希望解决Java堆空间的基本问题而不是屏蔽症状,那么您可以使用多种工具。
例如:Plumbr工具。在其他性能问题中,它捕获所有java.lang.OutOfMemoryErrors并自动告诉您导致它们的原因。您可以查看其他可用工具。而你的选择就是你的!
来源:
https://plumbr.eu/outofmemoryerror/java-heap-space
答案 1 :(得分:0)
可能有几个原因,
由于您没有增加默认内存分配,在高负载下,它可能没有足够的资源来为所有请求提供服务,而有些资源显然已经耗尽内存。首先要尝试的是调整jvm内存配置。
如果1不起作用,则可能是您的应用程序中可能阻止垃圾回收的错误。您可能希望在附加了分析器的情况下运行应用程序,以查看随时间收集的对象并使用该信息进行调试。