Skip to content

Instantly share code, notes, and snippets.

@rednaxelafx
Created November 17, 2011 02:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rednaxelafx/1372200 to your computer and use it in GitHub Desktop.
Save rednaxelafx/1372200 to your computer and use it in GitHub Desktop.
java.lang.InternalError: a fault occurred in a recent unsafe memory access operation in compiled Java code

Error message:

2011-11-17 09:32:51,715 [ajp-0.0.0.0-8009-3] ERROR com.alibaba.citrus.webx.impl.WebxRootControllerImpl - Error occurred while process request /
java.lang.InternalError: a fault occurred in a recent unsafe memory access operation in compiled Java code
        at java.nio.Bits.swap(Bits.java:27) ~[na:1.6.0_17]
        at java.nio.Bits.swap(Bits.java:37) ~[na:1.6.0_17]
        at java.nio.DirectByteBuffer.getInt(DirectByteBuffer.java:614) ~[na:1.6.0_17]
        at java.nio.DirectByteBuffer.getInt(DirectByteBuffer.java:624) ~[na:1.6.0_17]
        at com.taobao.common.nmap.Nmap.next2(Nmap.java:135) ~[common-nbeanutils-1.2.0.jar:na]
        at com.taobao.common.nmap.Nmap.get2(Nmap.java:177) ~[common-nbeanutils-1.2.0.jar:na]
        at com.taobao.common.ip.impl.LocalIpManager.getIpLocation(LocalIpManager.java:157) ~[common-ip-1.2.0.jar:na]
        at com.taobao.common.ip.impl.LocalIpManager.getIpInfo(LocalIpManager.java:95) ~[common-ip-1.2.0.jar:na]
        at com.taobao.ticket.web.module.screen.BaseScreen.getClientLocation(BaseScreen.java:54) ~[classes/:na]
        at com.taobao.ticket.web.module.screen.BaseScreen.getRegion(BaseScreen.java:142) ~[classes/:na]
        at com.taobao.ticket.web.module.control.index.RegionCinema.execute(RegionCinema.java:26) ~[classes/:na]
        at com.taobao.ticket.web.module.control.index.RegionCinema$$FastClassByCGLIB$$b889af0b.invoke(<generated>) ~[cglib.jar:na]
        at net.sf.cglib.reflect.FastMethod.invoke(FastMethod.java:53) ~[cglib.jar:4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)]
        at com.alibaba.citrus.service.moduleloader.impl.adapter.MethodInvoker.invoke(MethodInvoker.java:72) ~[citrus-webx-all-in-one-3.0.5.jar:na]
        at com.alibaba.citrus.service.moduleloader.impl.adapter.DataBindingAdapter.execute(DataBindingAdapter.java:37) ~[citrus-webx-all-in-one-3.0.5.jar:na]
        at com.alibaba.citrus.turbine.util.ControlTool.render(ControlTool.java:244) ~[citrus-webx-all-in-one-3.0.5.jar:na]
        at com.alibaba.citrus.service.velocity.support.RenderableHandler.referenceInsert(RenderableHandler.java:32) ~[citrus-webx-all-in-one-3.0.5.jar:na]
        at org.apache.velocity.app.event.ReferenceInsertionEventHandler$referenceInsertExecutor.execute(ReferenceInsertionEventHandler.java:87) ~[velocity-1.6.jar:1.6]
        at org.apache.velocity.app.event.EventHandlerUtil.iterateOverEventHandlers(EventHandlerUtil.java:444) ~[velocity-1.6.jar:1.6]
        at org.apache.velocity.app.event.EventHandlerUtil.referenceInsert(EventHandlerUtil.java:97) ~[velocity-1.6.jar:1.6]
        at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:379) ~[velocity-1.6.jar:1.6]
        at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336) ~[velocity-1.6.jar:1.6]
        at org.apache.velocity.Template.merge(Template.java:328) ~[velocity-1.6.jar:1.6]
        at org.apache.velocity.Template.merge(Template.java:235) ~[velocity-1.6.jar:1.6]
        at com.alibaba.citrus.service.velocity.impl.VelocityEngineImpl.mergeTemplate(VelocityEngineImpl.java:204) ~[citrus-webx-all-in-one-3.0.5.jar:na]
        at com.alibaba.citrus.service.velocity.impl.VelocityEngineImpl.mergeTemplate(VelocityEngineImpl.java:186) ~[citrus-webx-all-in-one-3.0.5.jar:na]

hotspot/src/share/vm/runtime/thread.cpp: JavaThread::check_and_handle_async_exceptions

    case _thread_in_Java:
      {
        ThreadInVMfromJava tiv(this);
        JavaThread* THREAD = this;
        THROW_MSG(vmSymbols::java_lang_InternalError(), "a fault occurred in a recent unsafe memory access operation in compiled Java code");
      }

hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp

static address handle_unsafe_access() {
  JavaThread* thread = JavaThread::current();
  address pc = thread->saved_exception_pc();
  // pc is the instruction which we must emulate
  // doing a no-op is fine:  return garbage from the load
  // therefore, compute npc
  address npc = Assembler::locate_next_instruction(pc);

  // request an async exception
  thread->set_pending_unsafe_access_error();

  // return address of next instruction to execute
  return npc;
}

JVM_handle_linux_signal()

 else if (thread->thread_state() == _thread_in_vm &&
               sig == SIGBUS && /* info->si_code == BUS_OBJERR && */
               thread->doing_unsafe_access()) {
        stub = StubRoutines::handler_for_unsafe_access();
    }

So it's a SIGBUS. What could have triggered a SIGBUS in DirectByteBuffer.getInt() ...?

@peter-lawrey
Copy link

I have seen this happen when passing a newly created direct ByteBuffer between threads. I have also seen this when memory mapping a file which is being appended to.

@cdman
Copy link

cdman commented Aug 28, 2015

It also happened to me, due to corrupted filesystem (ie. part of the file was unreadable). You can quickly diagnose this by doing something which reads through the whole file, such as cat file > /dev/null.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment