由windbg引起的WIN7 安裝 oracle11gR2 失敗(一閃而過)及解決辦法

首先聲明, 如果你的電腦上沒有安裝 windbg,  請忽略這篇文章, 請百度谷歌其他的文章。因爲本文記錄的問題原因是windbg引起的, 沒有裝windbg說明你的問題可能是其他原因造成的, 本文對你提供不了參考。

沒有排版, 請見諒。

現象: 安裝時顯示出現一個DOS命令行窗口, 檢查完 顯示器256色什麼的然後就一閃而過 就退出了。

解決方法: 取消勾選gflags 的 create user mode stack trace database、 應用, 然後重啓電腦, 再安裝即可成功。

 

過程:

安裝時, 留意到DOS窗口時, 啓動的是 C:\Users\think\AppData\Local\Temp\OraInstall2014-05-21_03-10-27PM \ 目錄下的程序, 所以我到相關目錄去找失敗日誌

有一個installActions2014-05-21_03-10-27PM.log , 遺憾的是, 裏面只有兩行日誌, 沒有錯誤信息, 這裏就不貼了。 後來無意中發現Temp目錄下面有

hs_err_pid6804.log 這樣的很多文件, 生成時間跟我的安裝時間差不多, 所以就去點開一看, 果然是相關的日誌, 這個是JVM crash的日誌。

貼出開頭部分內容 如下:


#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000773d08c5, pid=6804, tid=8028
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (1.5.0_17-b04 mixed mode)
# Problematic frame:
# C  [ntdll.dll+0x508c5]
#

---------------  T H R E A D  ---------------

Current thread (0x00000000009fdb50):  JavaThread "main" [_thread_in_Java, id=8028]
siginfo: ExceptionCode=0xc0000005, reading address 0xffffffffffffffff

Stack: [0x0000000000030000,0x0000000000130000),  sp=0x000000000012e698,  free space=1017k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [ntdll.dll+0x508c5]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
v  blob 0x0000000002725c7e
j  java.net.URL.<init>(Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V+350
j  java.net.URL.<init>(Ljava/net/URL;Ljava/lang/String;)V+4
j  java.net.URL.<init>(Ljava/lang/String;)V+3

 以“ntdll.dll+0x508c5 ” 以及 JAVA 調用堆棧代碼 爲關鍵字百度谷歌了許久,沒有找到有用的信息。 

然後是各種嘗試, 花費了非常多的時間。 我把部分有價值的說一下。

因爲oracle 自帶了JDK, 所以是不需要事先安裝JDK 環境的, 但是我木有辦法, 所以JDK 重裝、卸載、換版本一一嘗試, 還有JAVA的環境變量配置, 環境變量配置的一篇文章中寫了一個 Hello.java 來驗證環境是否配置成功 http://yangwen.blog.51cto.com/337928/98099/.

然後就發現了一個很囧的事情, 在JDK1.5.0.17 時Hello.java 都編譯不過, JDK1.7是可以編譯過hello.java, 但是oracle11g R2 安裝時使用的是自帶的JDK1.5, 我嘗試過修改install目錄下的oraparam.ini, 指定別的JRE 路徑, 但是沒成功。

然後用windbg 調試, 編譯程序javac,  因爲是64爲JDK, 所以要用64位windbg,  在cmd下 輸入  windbg javac D:\hello.java.   然後就先後遇到兩個0xc00000005 的內存訪問錯誤, 第一個錯誤終端的堆棧連模塊都看不到, 輸入g, 繼續 遇到第二個斷點, 堆棧如下: (之前忘記截圖了,所以堆棧 找了個網上相同的)

00000000`0404ca88 00000000`7727e7e2 ntdll!RtlCaptureContext+0x8c
00000000`0404ca98 00000000`7727e72b ntdll!RtlpWalkFrameChain+0x52
00000000`0404d018 00000000`773352f2 ntdll!RtlCaptureStackBackTrace+0x4b
00000000`0404d048 00000000`772e1d35 ntdll!RtlpStackTraceDatabaseLogPrefix+0x42
00000000`0404d178 00000000`7715d9fa ntdll! ?? ::FNODOBFM::`string'+0xa93f
00000000`0404d1f8 000007fe`fef0175c kernel32!HeapFree+0xa
*** WARNING: Unable to verify checksum for C:\Program Files\Java\jdk1.6.0_06\jre\bin\server\jvm.dll
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\Program Files\Java\jdk1.6.0_06\jre\bin\server\jvm.dll - 
00000000`0404d228 00000000`08101c09 msvcrt!free+0x1c

 

然後谷歌了 "JVM crash  ntdll!RtlCaptureContext" , 終於找到了一條 http://jpassing.com/2008/05/11/the-case-of-the-mysterious-jvm-x64-crashes/

裏面有一段 :So I disabled the stack trace database in gflags, rebooted the machine and �?voilà, the crash disappeared!

我按照他的說法取消勾選gflags 的 create user mode stack trace database、 應用, 然後重啓電腦, 再嘗試在JDK1.5下 編譯hello.java。

激動人心的時刻到了, 果然編譯過了, 然後執行(注意hello大小寫), 輸出正常。

再嘗試安裝oracle11gR2,  在固態硬盤的強勁作用下15分鐘安裝完畢, 嘎嘎嘎。

解決這個問題 用了2天的時間, 希望此文能幫到跟我一樣喜歡用windbg 的童鞋們, 不再走我的彎路。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章