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