識別是否存在競爭狀況

啟用追蹤點,以檢查在損毀之後未產生任何傾出的狀況。

關於此作業

透過在 Java™ 執行時期環境關閉附近啟用追蹤點,來檢查在當機之後未產生任何傾出的狀況。 如果追蹤點與損毀狀況重疊,則您已確認發生競爭狀況。 protectedDestroyJavaVM 中的追蹤點是在主要執行緒傳回之前要觸發的最後一個追蹤點。

程序

  1. 使用 判斷追蹤點的追蹤點 ID中的指示,在 J9TraceFormat.dat 檔中尋找 protectedDestroyJavaVM 函數追蹤點。
  2. 當您有追蹤點 ID 時,請重新執行失敗的實務,並將那些追蹤點傳送至主控台。
    結果類似於下列輸出:
    java -Xtrace:print=tpnid{j9vm.381-394} MyApp
    
    11:10:09.421*0x42cc1a00            j9vm.385      > protectedDestroyJavaVM
    11:10:09.421 0x42cc1a00            j9vm.386      - protectedDestroyJavaVM waiting for Java threads to 
    stop
    11:10:09.421 0x42cc1a00            j9vm.387      - protectedDestoryJavaVM all Java threads have stopped
    11:10:09.421 0x42cc1a00            j9vm.388      - protectedDestroyJavaVM protectedDestroyJavaVM 
    vmCleanup complete
    11:10:09.421 0x42cc1a00            j9vm.389      - protectedDestroyJavaVM VM Shutting Down Hook Fired
    Unhandled exception
    Type=Segmentation error vmState=0x00000000
    
    J9Generic_Signal_Number=00000004 ExceptionCode=c0000005 ExceptionAddress=430514BE ContextFlags=0001003f
    Handler1=7FEE9C40 Handler2=7FEC98C0 InaccessibleAddress=00000000
    EDI=000A70A0 ESI=432235D8 EAX=00000000 EBX=00192684
    ECX=00000001 EDX=4368FECC
    EIP=430514BE ESP=4368FED4 EBP=4368FED8 EFLAGS=00010246
    Module=failing_module.dll
    Module_base_address=43050000 Offset_in_DLL=000014be
    11:10:09.421 0x42cc1a00            j9vm.390      - Target=2_40_20081203_026494_lHdSMr (Windows XP 5.1 
    build 2600 Service Pack 2)
    protectedDestroyJavaVM GC HeapManagement ShutdownCPU=x86 (2 logical CPUs) (0x7fe6b000 RAM)
    
    11:10:09.421 0x42cc1a00            j9vm.391      - protectedDestroyJavaVM vmShutdown returned
    11:10:09.421 0x42cc1a00            j9vm.393      - protectedDestroyJavaVM terminateRemainingThreads failed
    protectedDestroyJavaVM 函數的第一個追蹤點之後,會列印 Unhandled exception 訊息。 此輸出顯示在 Java 執行時期環境的生命週期中非常晚才發生當機,且在處理程序結束之前仍有足夠時間產生傾出檔。

下一步

當您確認已發生競爭狀況時,您可能仍可以取得系統傾出檔。 如需相關資訊,請參閱 取得處於競爭狀況的系統傾出檔