我正在运行一个jar文件,它将数据从oracle复制到目标服务器(ElasticSearch)。链接文本我在AIX框上运行此jar:
/ oradata / slscrmit / tally> 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。
==================== ERROR ===============
JVMDUMP039I在2017年12月15日08:24:21处理转储事件“systhrow”,详细信息“java / lang / OutOfMemoryError” - 请稍候。 JVMDUMP032I JVM请求使用'/oradata/slscrmit/tally/core.20171215.082421.39781194.0001.dmp'响应事件进行系统转储注意:smit中的“启用完全CORE转储”设置为FALSE,因此线程有限核心文件中的信息。 JVMDUMP010I写入/oradata/slscrmit/tally/core.20171215.082421.39781194.0001.dmp的系统转储JVMDUMP032I JVM请求堆转储使用'/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 /的JVMDUMP010I Java转储事件slscrmit / tally / javacore.20171215.082421.39781194.0003.txt JVMDUMP032I JVM请求使用'/oradata/slscrmit/tally/Snap.20171215.082421.39781194.0004.trc'进行快照转储,以响应事件JVMDUMP010I写入/ oradata / slscrmit / tally /的快照转储Snap.20171215.082421.39781194.0004.trc JVMDUMP013I已处理的转储事件“systhrow”,详细信息为“java / lang / OutOfMemoryError”。 2017年12月15日上午8:24:23 org.elasticsearch.transport.netty.NettyInternalESLogger警告警告:选择器循环中出现意外异常。 java.lang.OutOfMemoryError:本地内存在java.nio.DirectByteBuffer上的sun.misc.Unsafe.allocateDBBMemory(本机方法)中耗尽。(DirectByteBuffer.java:127)at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311) org.elasticsearch.common.netty.channel.socket.nio.SocketReceiveBufferAllocator.newBuffer(SocketReceiveBufferAllocator.java:64)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)位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java)的org.elasticsearch.common.netty.util.internal.DeadLockProofWorker $ 1.run(DeadLockProofWorker.java:42) :1153)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:628)at java.lang.Thread.run(Thread.java:785)。
=============================================
SVMON输出:
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工作共享内存段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工作共享内存段m 4096 0 0 4096
14349c 8工作共享内存段m 4096 0 0 4096
1c2ed4e d工作共享内存段m 4096 0 0 4096
2e9eaf 9工作共享内存段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 ome a fr o fr fr in ss and cs us and id wa
6 1 27345787 25280860 0 0 0 0 0 0 1747 28990 59128 8 3 89 0
非PROD:!:_ mila:/ oradata / slscrmit / tally> oslevel -s
uname -a
7100-04-03-1642
非PROD:!:_ mila:/ oradata / slscrmit / tally> uname -a
AIX需要1 7 00F79AB04C00
filestyatem中也有空间:/ dev / slscrmit_oradt 2118.50 2024.41 94.09 96%/ oradata / slscrmit
我能够解决这个:::
根本原因:32位JVM在将Java堆内存和本机内存扩展到2GB以上时存在技术限制。包含setenv.sh文件。 “export JAVA_HOME = / usr / java8 / bin”,它指向32位JVM
解决方案:目标是指向64位JVM。还要检查内核位模式是否为64位?使用命令getconf KERNEL_BITMODE使用命令验证64位JVM版本:
更正所有AIX框上的setenv.sh指向64位jvm,导出JAVA_HOME = / usr / java8_64确保此文件中的其他条目指向此JAVA_HOME。
现在运行jar并指定具有所需堆大小的命令行参数。我能够以10g堆大小运行它。