當您側寫應用程式時,依預設,主控台視圖不會出現在「側寫和記載」視景中。
如果要在「側寫和記載」視景中開啟主控台視圖,請選取「視窗 -> 顯示視圖 -> 主控台」。
如果要使標準輸出顯示在主控台中,請按一下「視窗 -> 喜好設定 -> 執行/除錯 -> 主控台」,再選取在程式寫入標準輸出時顯示。
當建立新的 Probekit 程式檔時,您可以利用精靈來選擇要用的 XML 編碼。 預設選項是 ASCII。 如果您要在探針程式檔中的任何位置使用非 ASCII 字元(如在「標籤」或「說明」欄位中,或在片段的 Java 程式碼中),您必須選擇 UTF-8 編碼,而不是 ASCII。
如果要變更現有探針程式檔的編碼,請用滑鼠右鍵按一下檔案,再選取「開啟工具 -> 文字編輯器」。 請將 XML 標頭的編碼改成 "UTF-8",再儲存和關閉檔案。 再按一下滑鼠右鍵,選擇「開啟工具 -> 探針編輯器」來編輯內容。
在 OS/400® iSeries(TM) 中執行的使用者程式無法使用洩漏分析特性。這個平台所產生的 Hyades 最佳化資料堆傾出不完整,且不可能產生任何其他格式的資料堆傾出。
側寫工具的效能直接與所收集的資料量及這個資料轉送至工作台的速率相關。 當收集的資料量增加時,使用者會發現在分析所花的時間和執行不同作業所能使用的記憶體等方面,效能都會變差。 使用者可以利用許多種方式來加強側寫效能。
- 只收集足以側寫給定功能片段的最小資料量是一個好的起點。 在側寫啟動配置中設定較有效的過濾器,便可以做到這一點。 在「執行 -> 側寫」對話框中,選取「側寫」標籤。請選取一個側寫集,再選取「編輯」按鈕,再選取「下一步 >」,您便會進入「過濾器」對話框。 請利用過濾器,只併入您想要的區域。 在後來的執行作業中,您一律可以變更過濾器來併入不同的資料或更多資料。
- 如果您不要側寫啟動碼,請嘗試取消勾選「執行 -> 側寫」對話框「側寫 - 限制」標籤中的「在已啟動的應用程式上,自動開始監視」勾選框。 這應該有助於減少啟動分析的程式所花的時間,且不會側寫啟動程式碼。 請注意,如果要開始側寫,您必須在工作台啟動之後,在側寫監視器中,按一下「開始監視」工具列按鈕。
- 您可以嘗試將輸出重新導向檔案。 這會在 RAD 中使用較少記憶體。 您可以稍後在 RAD 只用來查看這個側寫檔案時,才將檔案匯入 RAD 中,使它有更多記憶體可供這項作業使用。 這是利用「執行 -> 側寫」對話框來完成的,請選取「側寫」標籤、「目的地」子標籤,再選取「將側寫資料傳給檔案」勾選框,之後,再進行側寫。 稍後,請利用「檔案 -> 匯入」對話框,再選取「側寫檔案」類型。 請注意,如果選取這個選項的話,您便不能在側寫時檢視資料。 您必須先匯入,才能檢視它。 在「匯入」對話框中,只匯入側寫檔案的片段,也能夠進一步縮減記憶體量。 也許匯入不同片段,再個別檢查它們,會有幫助。
- 側寫可能會造成大量的記憶體額外負荷,因此,增加 RAD 所用的虛擬記憶體可能會有幫助。 如果要啟動虛擬記憶體為 512MB(最多 1GB)的 RAD,請將下面這行新增至 rationalsdp.ini 檔中:VMArgs=-Xms512m -Xmx1024m
- 如果問題發生在目標系統中的資料收集期間,您可以嘗試增加用來將資料傳給 RAD 的緩衝區大小。 請將下面這行新增至 serviceconfig.xml 中,再重新啟動代理程式。 (這會將緩衝區大小增加到 256MB)。 在每個非常需要 CPU 的應用程式中,進一步增加資料通道大小也會有幫助: <Agent configuration="default" name="Java Profiling Agent" dataChannelSize="256M" type="profiler"/>
當收集二進位 Hyades 最佳化資料堆傾出時,如果您選取「將側寫資料傳給檔案」,將資料傳給 trcxml 檔,請注意下列事項:
您必須在部署主機中執行 Agent Controller,以存取它所儲存的資料堆檔案。 您第一次在 trcxml 檔上執行「匯入 -> 側寫檔案」時,洩漏分析和檢視物件參照圖的運作都會符合預期。
如果您再次執行「匯入 -> 側寫檔案」,匯入作業能夠運作,但試圖執行洩漏分析或檢視物件參照圖可能會失敗。這是因為在部署主機中,可能已無法使用所需要的資料堆檔案。
如果您發現這個問題,請從您最初匯入 trcxml 檔的專案中存取資料堆檔案。 資料堆檔案在 project 目錄下稱為 "leakanalysisheapdir" 的目錄中。
IBM(C)OS/390(SVC) 資料堆傾出非常大。 展開大型資料堆傾出,以便在「物件參照圖」視圖中檢視它們,可能要花很長的時間。 因此,作業看起來會像毀損。 即使進度監視器似乎停在 100%,工作台可能仍然持續進行展開資料堆傾出的動作。
執行「擷取資料堆傾出」動作會在目標應用程式部署其中的主機上,產生 Hyades 最佳化資料堆傾出。 資料堆傾出目的地目錄由 Agent Controller 配置檔 serviceconfig.xml 中的 LOCAL_AGENT_TEMP_DIR 設定來控制。 如果需要尋找和修改這個檔案的相關資訊,請參閱「偵測和分析執行時期問題」之下的說明主題「管理 Agent Controller」。
如果出現「下列步驟展開資料堆傾出失敗:...正在讀取檔案」或「下列步驟洩漏分析失敗:...正在建立資料堆物件參照圖」錯誤訊息,請確認 Agent Controller 是正在部署主機中執行,再重試您的指令。Agent Controller 會協助您將檔案從部署主機複製到工作台專案目錄。
如果在洩漏分析期間發現問題,您可能會發現洩漏分析日誌檔很有用。
在洩漏分析期間,診斷資訊會寫入 LeakAnalysis.log 檔中。LeakAnalysis.log 包含洩漏分析期間所執行的各種步驟的輸出,它會指出洩漏分析的執行成敗。
LeakAnalysis.log 會寫入與側寫資料相關的側寫專案中。比方說,Windows 的 <my_workspace>\ProfileProject\LeakAnalysis.log。
您可以利用 RADLEAKREGIONDUMP 系統內容,將其他資訊寫入日誌檔中。請將這個選項新增至 rationalsdp.ini 檔中:
VMArgs=-DRADLEAKREGIONDUMP=1
rationalsdp.ini 檔在 Rational Software Architect 安裝目錄中。
如果您的洩漏分析失敗,且 LeakAnalysis.log 檔出現「JVMDUMP006I 正在處理傾出事件 "uncaught",詳細資料 "java/lang/OutOfMemoryError"」訊息,您就必須增加洩漏分析程序的資料堆大小。
如果要執行這個動作,請設定 Rational Software Architect 系統屬性 RADLEAKJVMSIZE。 這個屬性會控制洩漏分析期間所能使用的 JVM 資料堆大小。
如果要設定 RADLEAKJVMSIZE,請將這個選項新增至 rationalsdp.ini 檔中:
VMArgs=-DRADLEAKJVMSIZE=value
其中 value 是新資料堆大小限制,如 1024M。 預設值是 512M。 您必須指出資料堆大小是用 MB 或 GB(M 或 G)來表示。
rationalsdp.ini 檔在 Rational Software Architect 安裝目錄中。
當搭配執行緒分析側寫特性來使用 IBM 典型 JVM 時,「側寫和記載」視景的執行緒視圖不會顯示死結中所隱含的所有執行緒的「等待鎖定」狀態。這是因為收集的資料中遺漏資訊。 暫行解決辦法:請在「側寫」對話框「引數」標籤的 VM 引數欄位中加入 -Xj9 來使用 IBM J9 JVM。
無法正確處理名稱中含非 ASCII 字元的 Probekit 程式檔。 請只在 Probekit 程式檔名稱中使用 ASCII 字元。
請勿使用 *.probe 檔的快速功能表中所顯示的「Probekit ->Compile」動作。相反地,請將包含 *.probe 檔的專案轉換成 Probekit 專案,再使用標準建置機制。 (如果要將 Java 專案轉換成 Probekit 專案,請使用「檔案 -> 新建 -> 其他」,再從「側寫和記載」區段中,選取將 Java 專案轉換成 Probekit 專案)。
請勿在 Probekit 的「目標」規格的型樣中使用非 ASCII 字元。目標型樣中含非 ASCII 字元的探針無法正確處理。
當新增「當...時,沖寫涵蓋面資料」的方法型樣時,請勿使用非 ASCII 字元
如果您在方法型樣「新增」對話框的套件、類別或方法欄位中輸入非 ASCII 字元,會出現輸入無效的錯誤,您將無法關閉對話框。
暫行解決辦法:請利用萬用字元(星號)來取代型樣中的非 ASCII 字元。
開頭是萬用字元(星號)的 EXCLUDE 過濾器,如 "*foo",會使「涵蓋面統計值」、「涵蓋面導覽器」和「含註釋的程式碼」視圖不顯示任何資料。 暫行解決方法:請勿使用這種 EXCLUDE 過濾器。
在您可以收集側寫資料之前,Agent Controller 必須已在您要從中收集資料的機器中執行。 在 RedHat Linux 機器中,Agent Controller 需要 libstdc++.so 修補程式 libstdc++-libc6.2-2.so.3。
在 IBM J9 JVM 中執行的使用者程式無法使用洩漏分析特性。
當您設定 IBM_HEAPDUMP 環境變數,且將 "kill -3" 信號傳給執行中的 Java 程序時,IBM J9 JVM 會利用類似 heapdump.20041012.093936.2192.dmp 的名稱來建立傾出檔。 您必須執行 j9extract 和 jdmpview 來後置處理這些 .dmp 檔及建立 IBM 資料堆傾出。
這些資料堆傾出的格式與典型 IBM jvm 所產生的資料堆傾出格式不同。
如果您將多組有相同監視器名稱的資料堆傾出匯入現有專案中,如果您後來又儲存專案或結束工作台,您可能會失去資料。
如果要防止這個情況,請指定專用的專案/監視器組合給每一組匯入的資料堆。
如果您啟動某 WAS 伺服器且連接到這個伺服器,Probekit 和行層次涵蓋面這兩個側寫類型不會收集目標 JVM 中已載入的任何類別的資料。 暫行解決方法:如果要從這些類別收集資料,請重新啟動包含這些類別的專案。
在側寫 WAS 以進行 Linux 中的洩漏分析時,optheap 檔會放在下列目錄中:
如果是 WAS 6.0,在 Rational Software Architect 安裝目錄的 runtimes/base_v6/profiles/default 中
如果是 WAS 5.x,在 Rational Software Architect 安裝目錄中。
在側寫期間,主控台視圖會將所有雙位元組字元顯示為 ????。
當收集 Hyades 最佳化資料堆傾出時,工作台主機、遠端部署主機和目標應用程式的語言環境設定都必須相同。
當利用 IBM JVM 1.4.1 或更早的版本來進行執行緒分析的側寫時,「側寫和記載」視景中的執行緒視圖不會顯示鎖定監視器的執行緒擁有者,因為沒有收集這個資料。 暫行解決方法:升級至 IBM JRE 1.4.2。
當在 Solaris 中進行遠端側寫時,Sun 1.4.x JRE 中的問題會防止側寫某些特性組合,當啟用記憶體側寫或執行緒分析時,尤其如此。Sun 的網站有這個問題的說明:http://developer.java.sun.com/developer/bugParade/bugs/4614956.html 解決辦法:請使用 JRE 1.4.2_06 或更新的版本。