目錄

簡介

必要條件

需求

採用元件

問題

疑難排解

獲取堆轉儲的步驟

獲取執行緒轉儲的步驟

簡介

本檔案介紹如何從思科客戶語音入口網站(CVP)語音可延伸標籤語言伺服器(VXML)收集Tomcat的堆轉儲和執行緒轉儲。

必要條件

需求

思科建議您瞭解以下主題：

- CVP

- CVP VXML伺服器

- CVP VXML應用

採用元件

本文中的資訊係根據以下軟體和硬體版本：

- CVP版本11.5

- CVP VXML伺服器11.5

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路運作中，請確保您瞭解任何指令可能造成的影響。

問題

方案1.在監控VXML伺服器效能時，您發現它使用4GB記憶體。  您希望在記憶體洩漏崩潰之前知道其根本原因。

案例2.在監控VXML伺服器時，您發現VXML伺服器使用高執行緒(~500)，這種情況非常少見。您想瞭解如何分析執行緒使用情況，找出執行緒狀態和佔用更多執行緒的元件/應用程式。

例如：VXML Tomcat佔用4.5GB的總記憶體，如圖所示。

4.5 GB的VXML記憶體

疑難排解

獲取堆轉儲的步驟

步驟1.下載JDK版本（類似於CVP中安裝的版本）

C:\Cisco\CVP\jre\bin>java -version

java version "1.7.0_51"

Java(TM) SE Runtime Environment (build 1.7.0_51-b13)

Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode)

步驟2.將JDK從案頭複製到CVP伺服器。

Download windows JDK exe

Open with 7-Zip

Dump contents into a directory %JDK-EXE%

cmd: cd %JDK-EXE%.rsrc\1033\JAVA_CAB10

cmd: extrac32 111

Now have a tools.zip in directory, open it in 7-Zip

Extract contents into a new directory %JDK-VERSION%

cmd: cd %JDK-VERSION%

cmd: for /r %x in (*.pack) do .\bin\unpack200 -r "%x" "%~dx%~px%~nx.jar"

附註：只需從http://www.oracle.com/technetwork/java/javaee/downloads/index.html下載JDK並在本地資料夾中安裝EXE，然後將JDK從本地電腦複製到CVP。

步驟3.從工作管理員收集VXML伺服器的進程ID(PID)。

步驟4.執行此命令以收集HeapDump。（例如： jmap -dump:file=vxml.hprof <TOMCAT例項的PID）。

C:\jdk1.7.0_80\jdk1.7.0_80\bin>jmap -dump:file=vxml.hprof 1308

Dumping heap to C:\jdk1.7.0_80\jdk1.7.0_80\bin\vxml.hprof ...

Heap dump file created

C:\jdk1.7.0_80\jdk1.7.0_80\bin>

注意：已建立hProf，您可以複製到本地系統並離線監視。

獲取執行緒轉儲的步驟

與堆轉儲相比，執行緒轉儲收集相對容易。

步驟1.連線到使用jVisualVM的<CVP VXML伺服器>:9696（9696是VXML伺服器的預設JMX埠）上的CVP VXML伺服器。

步驟2.按一下右鍵JXM連接和收集執行緒轉儲。

步驟3.此處執行緒轉儲已轉儲到遠端伺服器，可以儲存為檔案並用於進一步分析。