JAVA进程消耗了90%的SWAP空间

问题描述 投票:0回答:1

我有一个分配了20GB堆内存的应用程序。但是,即使仅很少或不到50%的堆内存被使用,我的服务器交换空间也被全部用完。 Java是消耗掉90%交换的过程。

仅在重启并显示以下警告后,SWAP才会释放。寻找根本原因以及由此引起的任何影响。如果交换已满,我的应用程序将无法启动吗?

我在应用程序启动期间在日志中看到的警告

[内存不足,Java运行时环境无法继续。本机内存分配(mmap)无法映射用于提交保留内存的17895718912字节。超出交换空间或堆资源限制(检查限制或ulimit)吗?会生成包含更多信息的错误报告,它以文件形式保存在以下位置:/XX/myapp/apache-tomcat-7.0.90/bin/hs_err_pid86282.log2020-01-14T05:17:18.742 + 0100 [INFO] [oscsPostProcessorRegistrationDelegate $ BeanPostProcessorChecker]类型为[org.springframework.aop.aspectj.AspectJAroundAdvice]的Bean'((内部bean)#1814a032')不适合所有人使用BeanPostProcessors(例如:不符合自动代理资格)***警告:INFO:os :: commit_memory(0x00000003fjgh0000,17895718912,0)失败;错误=“空间不足”(错误号= 12)没有足够的内存,Java运行时环境无法继续。本机内存分配(mmap)无法映射用于提交保留内存的17895718912字节。交换空间或堆资源超出限制(检查限制或ulimit)?会生成包含更多信息的错误报告,它以文件形式保存在以下位置:

我的JVM属性

/XX/java/bin/java -Djava.util.logging.config.file=/XX/myapp/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/xx/myapp/newrelic/newrelic.jar -Djdk.tls.ephemeralDHKeySize=2048 -Xms20g -Xmx20g -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -Djava.net.preferIPv4Stack=true -Dignore.endorsed.dirs= -classpath /XX/myapp/tomcat/bin/bootstrap.jar:/XX/myapp/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/XX/myapp/tomcat -Dcatalina.home=/XX/myapp/tomcat -Djava.io.tmpdir=/XX/myapp/tomcat/temp org.apache.catalina.startup.Bootstrap start

检查每个进程的交换使用情况,其Java使用90%的交换

jvm tomcat7 swap
1个回答
0
投票

您的Java进程仅由堆内存制成,[[不是

© www.soinside.com 2019 - 2024. All rights reserved.