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()
...?
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.