java.lang.OutOfMemoryError:本机内存耗尽

时间:2017-12-15 10:09:24

标签: out-of-memory heap-memory

我正在运行一个jar文件,它将数据从oracle复制到目标服务器(ElasticSearch)。链接文本我在AIX框上运行这个jar:

  

/ ORADATA / slscrmit /帐簿> oslevel -s

7100-04-03-1642

  

uname -a   AIX mila 1 7 00F79AB04C00。

运行jar文件时出现此错误: 用于运行的命令: java -Xms3g -Xmx3g -Xmn1g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -XX:MetaspaceSize=500m -XX:MaxMetaspaceSize=500m -XX:SurvivorRatio=2 -jar -Dlog4j.configurationFile=file:log4j2.xml -Dfile.encoding=UTF-8 BoltESTally-1.4.3-Ver-1.0.jar initload。

====================错误===============

  

JVMDUMP039I处理转储事件" systhrow",detail" java / lang / OutOfMemoryError"在2017/12/15 08:24:21 - 请稍等JVMDUMP032I JVM使用' /oradata/slscrmit/tally/core.20171215.082421.39781194.0001.dmp'请求系统转储;响应事件注意:"启用完整的CORE转储"在smit中设置为FALSE,因此核心文件中的线程信息有限。写入/oradata/slscrmit/tally/core.20171215.082421.39781194.0001.dmp JVMDUMP032I JVM JVMDUMP010I系统转储请求堆转储使用' /oradata/slscrmit/tally/heapdump.20171215.082421.39781194.0002.phd'响应事件JVMDUMP010I堆转储写入/oradata/slscrmit/tally/heapdump.20171215.082421.39781194.0002.phd JVMDUMP032I JVM使用' /oradata/slscrmit/tally/javacore.20171215.082421.39781194.0003.txt'请求Java转储;响应写入/oradata/slscrmit/tally/javacore.20171215.082421.39781194.0003.txt JVMDUMP032I JVM要求快转储使用&#39事件JVMDUMP010I Java转储; /oradata/slscrmit/tally/Snap.20171215.082421.39781194.0004.trc' ;在响应于一个事件JVMDUMP010I捕捉转储写入/oradata/slscrmit/tally/Snap.20171215.082421.39781194.0004.trc JVMDUMP013I耗时转储事件" systhrow&#34 ;,细节"爪哇/郎/ OutOfMemoryError异常" 。 2017年12月15日上午8:24:23 org.elasticsearch.transport.netty.NettyInternalESLogger警告警告:选择器循环中出现意外异常。 java.lang.OutOfMemoryError:本机内存在sun.misc.Unsafe.allocateDBBMemory(本机方法)在java.nio.DirectByteBuffer耗尽(DirectByteBuffer.java:127)在java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) org.elasticsearch.common.netty.channel.socket.nio.SocketReceiveBufferAllocator.newBuffer(SocketReceiveBufferAllocator.java:64)at org.elasticsearch.common.netty.channel.socket.nio.SocketReceiveBufferAllocator.get(SocketReceiveBufferAllocator.java:41)在org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:62)org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)在Org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)在org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)org.elasticsearch.common.netty.ut il.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)在org.elasticsearch.common.netty.util.internal.DeadLockProofWorker $ 1.run(DeadLockProofWorker.java:42)在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java :1153)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:628)at java.lang.Thread.run(Thread.java:785)。

=============================================

SVMON OUTPUT:

Pid命令使用Pin Pgsp虚拟64位Mthrd 16MB 24315106 java 796276 11137 0 779119 N Y N

 PageSize                Inuse        Pin       Pgsp    Virtual

 s    4 KB               18356        225          0       1199

 m   64 KB               48620        682          0      48620
 L   16 MB                   0          0          0          0
 S   16 GB                   0          0          0          0

Vsid      Esid Type Description              PSize  Inuse   Pin Pgsp Virtual

169bfe6 4 work共享内存段m 4096 0 0 4096

84ba04 e work共享内存段m 4096 0 0 4096

1025d8c 7工作共享内存段m 4096 0 0 4096

13225a5 6工作共享内存段m 4096 0 0 4096

119a981 c work共享内存段m 4096 0 0 4096

14349c 8 work共享内存段m 4096 0 0 4096

1c2ed4e d工作共享内存段m 4096 0 0 4096

2e9eaf 9 work共享内存段m 4096 0 0 4096

7854f1 5工作共享内存段m 4096 0 0 4096

f2b266 f work共享内存段m 4095 0 0 4095

181650e工作共享内存段m 4090 0 0 4090

1d42b52 3工作储存m 2681 0 0 2681

20002 0工作内核段m 743 681 0 743

=============================================== ====: 我的Aix盒子上有足够的空间: vmstat:

系统配置:lcpu = 128 mem = 256512M

kthr内存页面故障cpu

r b avm fre pi pi po fr sr cy in sy cs us sy id wa

6 1 27345787 25280860 0 0 0 0 0 0 1747 28990 59128 8 3 89 0

  !

NON-PROD::_米拉:/ ORADATA / slscrmit /帐簿> oslevel -s

uname -a

7100-04-03-1642

NON-PROD::_米拉:/ ORADATA / slscrmit /帐簿> uname -a

AIX mila 1 7 00F79AB04C00

filestyatem中也有空格: / dev / slscrmit_oradt 2118.50 2024.41 94.09 96%/ oradata / slscrmit

enter image description here

1 个答案:

答案 0 :(得分:0)

我能够解决这个:::

根本原因:  32位JVM在将Java堆内存和本机内存扩展到2GB以上时存在技术限制。 包含setenv.sh文件。 “export JAVA_HOME = / usr / java8 / bin”,它指向32位JVM

解决方案: 目标是指向64位JVM。 还要检查内核位模式是否为64位?使用命令getconf KERNEL_BITMODE 使用命令验证64位JVM版本:

java -d64 -version

在所有AIX框上更正setenv.sh指向64位jvm,导出JAVA_HOME = / usr / java8_64 确保此文件中的其他条目指向此JAVA_HOME。

现在运行jar并指定具有所需堆大小的命令行参数。我能够以10g堆大小运行它。