微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java OutOfMemory异常:加载zip文件时出现mmap错误

我运行我的应用程序生产env(rhel 5.2 x64,oracle jre 1.7_05,tomcat 7.0.28)与JVM参数:
-xms8192m -Xmx8192m -XX:MaxPermSize=1024m 
-Doracle.net.tns_admin=/var/ora_net -XX:ReservedCodeCacheSize=512m -XX:+AggressiveOpts -XX:+UseFastAccessorMethods 
-XX:+UseStringCache -XX:+OptimizeStringConcat -XX:+UseCompressedOops -XX:+UseG1GC -Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9026 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

几次之后,我有堆栈跟踪:

Java HotSpot(TM) 64-Bit Server VM warning: Attempt to deallocate stack guard pages Failed.
Java HotSpot(TM) 64-Bit Server VM warning: Attempt to allocate stack guard pages Failed.
mmap Failed for CEN and END part of zip file
[...]
Caused by: java.lang.OutOfMemoryError: null
    at java.util.zip.ZipFile.$$YJP$$open(Native Method) ~[na:1.7.0_05]
    at java.util.zip.ZipFile.open(UnkNown Source) ~[na:1.7.0_05]
    at java.util.zip.ZipFile.<init>(UnkNown Source) ~[na:1.7.0_05]
    at java.util.zip.ZipFile.<init>(UnkNown Source) ~[na:1.7.0_05]
    at java.util.jar.JarFile.<init>(UnkNown Source) ~[na:1.7.0_05]
    at java.util.jar.JarFile.<init>(UnkNown Source) ~[na:1.7.0_05]
    at sun.net.www.protocol.jar.URLJarFile.<init>(UnkNown Source) ~[na:1.7.0_05]
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(UnkNown Source) ~[na:1.7.0_05]
    at sun.net.www.protocol.jar.JarFileFactory.get(UnkNown Source) ~[na:1.7.0_05]
    at sun.net.www.protocol.jar.JarURLConnection.connect(UnkNown Source) ~[na:1.7.0_05]
    at sun.net.www.protocol.jar.JarURLConnection.getInputStream(UnkNown Source) ~[na:1.7.0_05]
    at java.net.URL.openStream(UnkNown Source) ~[na:1.7.0_05]
    at org.apache.catalina.loader.WebappClassLoader.findLoadedResource(WebappClassLoader.java:3279) ~[na:na]
    at org.apache.catalina.loader.WebappClassLoader.getResourceAsstream(WebappClassLoader.java:1478) ~[na:na]
    at org.apache.http.util.VersionInfo.loadVersionInfo(VersionInfo.java:242) ~[httpcore-4.2.jar:4.2]
    at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:180) ~[httpclient-4.2.jar:4.2]
    at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158) ~[httpclient-4.2.jar:4.2]
    at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448) ~[httpclient-4.2.jar:4.2]

看着我的分析器 – 一切都很好(堆和非堆内存用于10%),我不知道问题在哪里.

这个问题每天都在同一时间发生,它没有连接到应用程序正常运行时间.原因是什么问题?

编辑:

日志文件中的新输出

Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled.
Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize=
Code Cache  [0x00002aaaab790000,0x00002aaaad240000,0x00002aaacb790000)
 total_blobs=4223 nmethods=3457 adapters=707 free_code_cache=497085Kb largest_free_block=508887936

我有足够的记忆:http://i.stack.imgur.com/K8VMx.jpg

回答:
java版本中的问题这里描述:https://forums.oracle.com/forums/thread.jspa?messageID=10369413

解决方法

之前我已经看到这些错误,当运行的资源,如运行的交换空间或运行的允许的内存映射之前.看看sudo cat / proc / $PID / maps | wc -l与cat / proc / sys / vm / max_map_count进行比较

见下面的评论.

我也建议….

你似乎遇到了一个与你的Kit的bug.你使用什么版本?

我会削减大部分的选择,因为他们是认的,不做任何事情或可能会使事情复杂化.

-mx8g -XX:MaxPermSize=1g -Doracle.net.tns_admin=/var/ora_net 
-XX:ReservedCodeCacheSize=512m -XX:+UseG1GC -Dcom.sun.management.jmxremote.port=9026

我会尝试放弃-XX:UseG1GC以及这是一个相对较新的收藏家,不应该改变你的结果.

原文地址:https://www.jb51.cc/java/125052.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐