环境:B/S项目、OpenSolaris、JDK1.6、Tomcat
条件:1. 通过JNA调用本地函数(由C编写的测试库);
2. 通过传入参数出现异常(该库接收int参数,0为正常;非0抛出异常)。
问题:当传入0时,一切结果都和预想效果一样,没有任何错误产生;当传入1时,开始等待(底层调用的库应该在这时出异常了)等待几秒后,Tomcat服务器自动停止。请问,本地库的方法内部的异常咋办?为什么它内部有异常,Tomcat挂了?仍然用JNA的话,有没有什么解决办法?解决问题,100分重谢!
条件:1. 通过JNA调用本地函数(由C编写的测试库);
2. 通过传入参数出现异常(该库接收int参数,0为正常;非0抛出异常)。
问题:当传入0时,一切结果都和预想效果一样,没有任何错误产生;当传入1时,开始等待(底层调用的库应该在这时出异常了)等待几秒后,Tomcat服务器自动停止。请问,本地库的方法内部的异常咋办?为什么它内部有异常,Tomcat挂了?仍然用JNA的话,有没有什么解决办法?解决问题,100分重谢!
也算是JNI吧,其上的一个封装或演变,确实是JNA
这样就会仅仅加载native libary一次了。
请问这位朋友,能否简单扼要的说明问题?
然后,补充一下,我遇到的不是重复加载的问题,而且也不是JNI;而是JNA调用本地库,本地库函数内部出现异常,然后Tomcat崩溃的问题。
谢谢你的热心回复,请就问题之处讨论。
所以不排除是他们代码的bug。请先在重现这个错误时,检查一下你的tomcat使用的jdk或者jre的bin目录,看看下面有没有hs_err_pid*****.log类似的log文件
如果有,这里面就记录了错误所在。如果没有,请再描述清楚点,或者贴点代码,呵呵。
找了半天才找到这个日志文件。。结果是在CATALINA_HOME的bin下面。。我把内容全部都贴出来吧,如下:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_INT_DIVIDE_BY_ZERO (0xc0000094) at pc=0x036813c0, pid=5424, tid=1980
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_14-b03 mixed mode, sharing)
# Problematic frame:
# C [ExceptionTest.dll+0x113c0]
#--------------- T H R E A D ---------------Current thread (0x008a5dd0): JavaThread "http-8080-1" daemon [_thread_in_native, id=1980]siginfo: ExceptionCode=0xc0000094Registers:
EAX=0x00000064, EBX=0x00000000, ECX=0x00000000, EDX=0x00000000
ESP=0x0366ebd4, EBP=0x0366ecb8, ESI=0x0366eda0, EDI=0x0366ecb8
EIP=0x036813c0, EFLAGS=0x00010213Top of Stack: (sp=0x0366ebd4)
0x0366ebd4: 008a5dd0 0366eda0 00000000 cccccccc
0x0366ebe4: cccccccc cccccccc cccccccc cccccccc
0x0366ebf4: cccccccc cccccccc cccccccc cccccccc
0x0366ec04: cccccccc cccccccc cccccccc cccccccc
0x0366ec14: cccccccc cccccccc cccccccc cccccccc
0x0366ec24: cccccccc cccccccc cccccccc cccccccc
0x0366ec34: cccccccc cccccccc cccccccc cccccccc
0x0366ec44: cccccccc cccccccc cccccccc cccccccc Instructions: (pc=0x036813c0)
0x036813b0: ff eb 18 c7 45 f8 00 00 00 00 b8 64 00 00 00 99
0x036813c0: f7 7d f8 89 45 ec b8 01 00 00 00 5f 5e 5b 81 c4
Stack: [0x03630000,0x03670000), sp=0x0366ebd4, free space=250k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [ExceptionTest.dll+0x113c0]
C [jna13836.tmp+0xda37]
C [jna13836.tmp+0x9182]
C [jna13836.tmp+0x2161]
C [jna13836.tmp+0x2849]
j com.sun.jna.Function.invokeInt(I[Ljava/lang/Object;)I+0
j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;+309
j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+194
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+344
j $Proxy0.doExceptionTest(I)I+19
j com.wolflai.action.TestAction.test(Lorg/apache/struts/action/ActionMapping;Lorg/apache/struts/action/ActionForm;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lorg/apache/struts/action/ActionForward;+22
v ~StubRoutines::call_stub
V [jvm.dll+0x875dd]
V [jvm.dll+0xdfd96]
V [jvm.dll+0x874ae]
V [jvm.dll+0xf3f82]
V [jvm.dll+0xa5752]
C [java.dll+0x6d4f]
j sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+87
J sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
J java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
j org.apache.struts.actions.DispatchAction.dispatchMethod(Lorg/apache/struts/action/ActionMapping;Lorg/apache/struts/action/ActionForm;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/String;)Lorg/apache/struts/action/ActionForward;+114
j org.apache.struts.actions.DispatchAction.execute(Lorg/apache/struts/action/ActionMapping;Lorg/apache/struts/action/ActionForm;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lorg/apache/struts/action/ActionForward;+113
j org.apache.struts.actions.MappingDispatchAction.execute(Lorg/apache/struts/action/ActionMapping;Lorg/apache/struts/action/ActionForm;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lorg/apache/struts/action/ActionForward;+6
j org.apache.struts.action.RequestProcessor.processActionPerform(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/apache/struts/action/Action;Lorg/apache/struts/action/ActionForm;Lorg/apache/struts/action/ActionMapping;)Lorg/apache/struts/action/ActionForward;+7
j org.apache.struts.action.RequestProcessor.process(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+257
j org.apache.struts.action.ActionServlet.process(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+40
j org.apache.struts.action.ActionServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+3
j javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+139
j javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+30
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+374
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
j org.apache.catalina.core.StandardWrapperValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+804
j org.apache.catalina.core.StandardContextValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+365
j org.apache.catalina.core.StandardHostValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+64
j org.apache.catalina.valves.ErrorReportValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+6
j org.apache.catalina.core.StandardEngineValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+42
j org.apache.catalina.connector.CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V+157
j org.apache.coyote.http11.Http11Processor.process(Ljava/net/Socket;)V+432
j org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Ljava/net/Socket;)Z+82
j org.apache.tomcat.util.net.JIoEndpoint$Worker.run()V+41
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub
V [jvm.dll+0x875dd]
V [jvm.dll+0xdfd96]
V [jvm.dll+0x874ae]
V [jvm.dll+0x8720b]
V [jvm.dll+0xa2089]
V [jvm.dll+0x1112e8]
V [jvm.dll+0x1112b6]
C [MSVCRT.dll+0x2a3b0]
C [kernel32.dll+0xb683]
未完待续...
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j com.sun.jna.Function.invokeInt(I[Ljava/lang/Object;)I+0
j com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;+309
j com.sun.jna.Function.invoke(Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;+194
j com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+344
j $Proxy0.doExceptionTest(I)I+19
j com.wolflai.action.TestAction.test(Lorg/apache/struts/action/ActionMapping;Lorg/apache/struts/action/ActionForm;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lorg/apache/struts/action/ActionForward;+22
v ~StubRoutines::call_stub
j sun.reflect.NativeMethodAccessorImpl.invoke0(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+0
j sun.reflect.NativeMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+87
J sun.reflect.DelegatingMethodAccessorImpl.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
J java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
j org.apache.struts.actions.DispatchAction.dispatchMethod(Lorg/apache/struts/action/ActionMapping;Lorg/apache/struts/action/ActionForm;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/String;)Lorg/apache/struts/action/ActionForward;+114
j org.apache.struts.actions.DispatchAction.execute(Lorg/apache/struts/action/ActionMapping;Lorg/apache/struts/action/ActionForm;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lorg/apache/struts/action/ActionForward;+113
j org.apache.struts.actions.MappingDispatchAction.execute(Lorg/apache/struts/action/ActionMapping;Lorg/apache/struts/action/ActionForm;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lorg/apache/struts/action/ActionForward;+6
j org.apache.struts.action.RequestProcessor.processActionPerform(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Lorg/apache/struts/action/Action;Lorg/apache/struts/action/ActionForm;Lorg/apache/struts/action/ActionMapping;)Lorg/apache/struts/action/ActionForward;+7
j org.apache.struts.action.RequestProcessor.process(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+257
j org.apache.struts.action.ActionServlet.process(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+40
j org.apache.struts.action.ActionServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+3
j javax.servlet.http.HttpServlet.service(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V+139
j javax.servlet.http.HttpServlet.service(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+30
j org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+374
j org.apache.catalina.core.ApplicationFilterChain.doFilter(Ljavax/servlet/ServletRequest;Ljavax/servlet/ServletResponse;)V+101
j org.apache.catalina.core.StandardWrapperValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+804
j org.apache.catalina.core.StandardContextValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+365
j org.apache.catalina.core.StandardHostValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+64
j org.apache.catalina.valves.ErrorReportValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+6
j org.apache.catalina.core.StandardEngineValve.invoke(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V+42
j org.apache.catalina.connector.CoyoteAdapter.service(Lorg/apache/coyote/Request;Lorg/apache/coyote/Response;)V+157
j org.apache.coyote.http11.Http11Processor.process(Ljava/net/Socket;)V+432
j org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Ljava/net/Socket;)Z+82
j org.apache.tomcat.util.net.JIoEndpoint$Worker.run()V+41
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub
未完待续...
--------------- P R O C E S S ---------------Java Threads: ( => current thread )
=>0x008a5dd0 JavaThread "http-8080-1" daemon [_thread_in_native, id=1980]
0x008a4d40 JavaThread "TP-Monitor" daemon [_thread_blocked, id=1984]
0x008a3a70 JavaThread "TP-Processor4" daemon [_thread_in_native, id=1272]
0x008a1180 JavaThread "TP-Processor3" daemon [_thread_blocked, id=8028]
0x008a0200 JavaThread "TP-Processor2" daemon [_thread_blocked, id=6876]
0x008a14d0 JavaThread "TP-Processor1" daemon [_thread_blocked, id=4740]
0x00867e10 JavaThread "http-8080-Acceptor-0" daemon [_thread_in_native, id=2364]
0x0089b060 JavaThread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon [_thread_blocked, id=5748]
0x008300d0 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=5744]
0x0082f690 JavaThread "CompilerThread0" daemon [_thread_blocked, id=7736]
0x0082e5a0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=1204]
0x0082d930 JavaThread "Finalizer" daemon [_thread_blocked, id=4572]
0x0082c6c0 JavaThread "Reference Handler" daemon [_thread_blocked, id=2264]
0x008236c0 JavaThread "main" [_thread_in_native, id=7872]Other Threads:
0x0082b950 VMThread [id=6960]
0x00832bc0 WatcherThread [id=5264]VM state:not at safepoint (normal execution)VM Mutex/Monitor currently owned by a thread: NoneHeap
def new generation total 704K, used 581K [0x22bd0000, 0x22c90000, 0x230b0000)
eden space 640K, 83% used [0x22bd0000, 0x22c55578, 0x22c70000)
from space 64K, 74% used [0x22c80000, 0x22c8bfd0, 0x22c90000)
to space 64K, 0% used [0x22c70000, 0x22c70000, 0x22c80000)
tenured generation total 8496K, used 7206K [0x230b0000, 0x238fc000, 0x26bd0000)
the space 8496K, 84% used [0x230b0000, 0x237b9a18, 0x237b9c00, 0x238fc000)
compacting perm gen total 8192K, used 7791K [0x26bd0000, 0x273d0000, 0x2abd0000)
the space 8192K, 95% used [0x26bd0000, 0x2736bef0, 0x2736c000, 0x273d0000)
ro space 8192K, 67% used [0x2abd0000, 0x2b1322c8, 0x2b132400, 0x2b3d0000)
rw space 12288K, 47% used [0x2b3d0000, 0x2b97f6a0, 0x2b97f800, 0x2bfd0000)Dynamic libraries:
0x00400000 - 0x0040d000 E:\Java\jdk1.5.0_14\bin\javaw.exe
0x7c920000 - 0x7c9b4000 C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c91d000 C:\WINDOWS\system32\kernel32.dll
0x77da0000 - 0x77e49000 C:\WINDOWS\system32\ADVAPI32.dll
0x77e50000 - 0x77ee2000 C:\WINDOWS\system32\RPCRT4.dll
0x77fc0000 - 0x77fd1000 C:\WINDOWS\system32\Secur32.dll
0x77d10000 - 0x77d9f000 C:\WINDOWS\system32\USER32.dll
0x77ef0000 - 0x77f37000 C:\WINDOWS\system32\GDI32.dll
0x77be0000 - 0x77c38000 C:\WINDOWS\system32\MSVCRT.dll
0x76300000 - 0x7631d000 C:\WINDOWS\system32\IMM32.DLL
0x62c20000 - 0x62c29000 C:\WINDOWS\system32\LPK.DLL
0x73fa0000 - 0x7400b000 C:\WINDOWS\system32\USP10.dll
0x6d740000 - 0x6d8de000 E:\Java\jdk1.5.0_14\jre\bin\client\jvm.dll
0x76b10000 - 0x76b3a000 C:\WINDOWS\system32\WINMM.dll
0x6d300000 - 0x6d308000 E:\Java\jdk1.5.0_14\jre\bin\hpi.dll
0x76bc0000 - 0x76bcb000 C:\WINDOWS\system32\PSAPI.DLL
0x6d710000 - 0x6d71c000 E:\Java\jdk1.5.0_14\jre\bin\verify.dll
0x6d380000 - 0x6d39d000 E:\Java\jdk1.5.0_14\jre\bin\java.dll
0x6d730000 - 0x6d73f000 E:\Java\jdk1.5.0_14\jre\bin\zip.dll
0x6d540000 - 0x6d553000 E:\Java\jdk1.5.0_14\jre\bin\net.dll
0x71a20000 - 0x71a37000 C:\WINDOWS\system32\WS2_32.dll
0x71a10000 - 0x71a18000 C:\WINDOWS\system32\WS2HELP.dll
0x719c0000 - 0x719fe000 C:\WINDOWS\system32\mswsock.dll
0x60fd0000 - 0x61025000 C:\WINDOWS\system32\hnetcfg.dll
0x71a00000 - 0x71a08000 C:\WINDOWS\System32\wshtcpip.dll
0x76ef0000 - 0x76f17000 C:\WINDOWS\system32\DNSAPI.dll
0x76f80000 - 0x76f88000 C:\WINDOWS\System32\winrnr.dll
0x76f30000 - 0x76f5c000 C:\WINDOWS\system32\WLDAP32.dll
0x16080000 - 0x16099000 C:\Program Files\Bonjour\mdnsNSP.dll
0x76d30000 - 0x76d48000 C:\WINDOWS\system32\Iphlpapi.dll
0x76f90000 - 0x76f96000 C:\WINDOWS\system32\rasadhlp.dll
0x10000000 - 0x10052000 E:\Apache Software Foundation\Tomcat 6.0\temp\jna13836.tmp
0x03670000 - 0x0368b000 C:\WINDOWS\system32\ExceptionTest.dll
0x10200000 - 0x10320000 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\MSVCR80D.dllVM Arguments:
jvm_args: -Dcatalina.home=E:\Apache Software Foundation\Tomcat 6.0 -Dcatalina.base=E:\Apache Software Foundation\Tomcat 6.0 -Djava.endorsed.dirs=E:\Apache Software Foundation\Tomcat 6.0/common/endorsed -Djava.io.tmpdir=E:\Apache Software Foundation\Tomcat 6.0\temp -Djava.library.path=E:\Java\jdk1.5.0_14\bin;E:\Apache Software Foundation\Tomcat 6.0\bin -Dsun.io.useCanonCaches=false
java_command: org.apache.catalina.startup.Bootstrap start
Launcher Type: SUN_STANDARDEnvironment Variables:
JAVA_HOME=E:\Java\jdk1.5.0_14
CLASSPATH=E:\Java\jdk1.5.0_14\lib;.
PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Intel\DMIX;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;E:\Java\jdk1.5.0_14\bin;;E:\MySQL\MySQL Server 5.1\bin;E:\JBoss-4.2.3.GA\bin;E:\glassfish-v2.1\bin;;C:\strawberry\c\bin;C:\strawberry\perl\bin;4.564730E+219YBUILD_BASE/bin;e:\StormII\Codec;e:\StormII;E:\SSH Communications Security\SSH Secure Shell
USERNAME=wolf.lai
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 11, GenuineIntel
未完待续...
谢谢这位仁兄的回复,终于可以发帖了
--------------- S Y S T E M ---------------OS: Windows XP Build 2600 Service Pack 2CPU:total 2 (cores per cpu 2, threads per core 1) family 6 model 15 stepping 11, cmov, cx8, fxsr, mmx, sse, sse2Memory: 4k page, physical 2066664k(1128456k free), swap 4194303k(4194303k free)vm_info: Java HotSpot(TM) Client VM (1.5.0_14-b03) for windows-x86, built on Oct 5 2007 01:21:52 by "java_re" with MS VC++ 6.0CSDN不能上传附件么?郁闷,源码地址如下:
http://pickup.mofile.com/1277448483222153
你说传入的是0或者1应该是int型的,那么你就要检查你的dll里是int型还是int指针,你可以用int或intByreference类型来试试。解决了,不要忘了给我加分。谢谢。
你好,日志里面的出错情况我知道,也是预料中的。
那个dll的作用就是用来出现正常运行、出现异常、直接退出(dll内部调用exit())这3种情况的。
因为真正项目中有很多库是用别人提供的,而且没有源码,其内部有可能会出现上述3种情况。
当库中出现异常和直接退出时,Tomcat就自动关闭了。我就是想,如果库中出现异常或者直接退出,Tomcat照样正常运行。就是这样的要求。放心,解决了后,有用回复铁定加分。