2009-04-29 126 views
5

首先,只是有點背景:CPU使用率峯值6.1

我們的一個客戶正在經歷CPU使用高峯運行我們的Web應用程序之一的WebSphere實例(與其他應用程序等情況都很好) 。他們有一個測試環境和一個實時環境(兩個iSeries)都遇到了問題 - 每個實例安裝一個應用程序。我們已經在我們自己的測試環境中本地部署了該應用程序,並且也爲iSeries上的許多其他客戶部署了此應用程序,但沒有類似問題

什麼是實際發生的事情:

每隔一秒左右,用於WebSphere Process'的CPU使用率的CPU使用率跳轉到從7%任何地方 - 20%即使沒有當時正在處理的請求。客戶報告發現峯值高達30%。這些峯值的平均值總體上爲CPU的1.5% - 其他WebSphere實例在空閒時通常使用0% - 0.1%

我的調查至今

所以,我看了一下線程。測試環境中的一個線程每秒使用~350 CPU週期。他們的生活環境中的一個類似的線程是使用~1500 CPU週期每秒(表明它有更大的CPU)。這些線程的調用堆棧看起來像

Type Program     Statement   Procedure      
     QLESPI  QSYS   17    LE_Create_Thread2__FP12crtt > 
     QJVALIBJVM QSYS   7     startThread__FPv    
J com/ibm/ws/util/Threa >     run       
J com/ibm/ws/util/Threa >     run       
J com/ibm/ws/util/Threa >     getTask      
J com/ibm/ws/util/Bound >     poll 

底線的整個類名是com/ibm/ws/util/BoundedBuffer。我問客戶爲我做一個JVM轉儲 - 我從這次拿到的唯一附加信息是線程名:

Thread: 00002F82 Deferrable Alarm : 11 

現在對於我的問題:

  • 任何你能辨認問題,鑑於這些症狀? (也許這是一個長鏡頭!)
  • 什麼是Deferrable Alarm?從JVM轉儲,我可以看到4個線程與這個名字。其他三個似乎做得很好。通過調試我的本地WebSphere(在Windows上)並在BoundedBuffer類中添加斷點,我發現BoudedBuffer正在輪詢並定期調用某個偵聽器。
  • 我無法訪問用於客戶機器的WebSphere控制檯,並且他們並不擁有任何配置更改。我可以讓他們爲我檢查控制檯 - 我應該問他們看什麼?
  • 我有telnet訪問客戶箱,有什麼我可以在這裏調查嗎?查看WebSphere配置文件等?我應該查看哪些文件?
  • 由於調用堆棧和JVM轉儲沒有明確引用我們的代碼,因此假設這是一個配置問題是否安全?

這是一個長期的問題,所以感謝您閱讀這些。

4月30日更新(1)

今天早上我已經注意到,這種行爲只有一天的第一個請求處理完畢後發生的(不管是哪個的Web服務調用)。這將手指指向我們的應用程序或Apache Axis。難道這只是正常的行爲?!

4月30日更新(2)

如此看來,這個CPU活動是用於Web容器某種管理行爲的或者也可以是Apache Axis的範圍內。我現在觀察到這發生在幾個不同的服務器上的幾個不同的Web應用程序上。沒有Web組件的應用程序不會遭受額外的CPU額外開銷。

我想象一下,如果它是家務工作,那麼「調整」它可能會產生反作用 - 因此,我的意思是讓App Server更好地閒置可能會負面影響「真正」的工作量做。

+0

這個客戶i系列與您的其他客戶處於同一水平嗎?是否有其他差異,使這一個獨特? – Ichorus 2009-05-01 17:36:24

+0

是的,它是相同的水平。它也發生在WebSphere 5.1以及6.1 – 2009-05-05 08:07:10

回答

0

很本能地(是不熟悉的iSeries平臺),我想看看磁盤IO相關問題。你能描述磁盤子系統嗎?你能否看到你的應用程序是否在艾奧瓦特中花費了非常多的時間?

+0

感謝您的建議。我曾看過I/O,但是當服務器空閒時,仍有CPU峯值,但沒有I/O調用。 – 2009-04-30 10:31:14

0

我最好的猜測是,它是某種類型的監測正在對實例來完成,像Tivioli等你有沒有排除任何GC活動?

HTH湯姆

1

你可以嘗試分析和做應用程序的堆轉儲,即可以回答有關內存和CPU使用的一些問題。

0

大多數應用服務器在Java本身實現的,所以是的WebSphere。除了服務客戶端請求之外,該服務器還必須執行其他定期工作,如說資源池管理。執行此作業將創建一些需要垃圾收集的臨時對象。

取決於你有多少堆分配,使用和垃圾收集器的設置,垃圾收集器會被調用。我會說,試着看看它是否是佔用你的CPU的垃圾回收器線程。爲此,將jconsole實用程序連接到遠程websphere進程一天,並查看堆使用情況和CPU使用情況之間是否存在任何關聯關係。

1

我建議以下的必須收集IBM提供documentation,並用自己的調查一起養PMR。事情你可能會懷疑:

  • 垃圾收集(不太可能在應用低利用率)
  • 定時器或任務(如java.util中。定時器或CommonJ工作管理器)
  • 具有複雜的SQL查詢(在數據源的WebSphere Application Server數據源屬性)

我也建議使用Profiler來確定原因考前連接,YourKit profiler是一個漂亮的體面的一個。

0

我也遇到了這個問題,使用BoundedBuffer [Deferrable Alarm:x]。我唯一的區別是這是在Windows 7 64位機器上。絕對沒有Tivioli或其他批處理運行,沒有請求,單個實例只是空閒。

我可以在DEBUG模式下運行應用程序並暫停可延期警報線程,CPU峯值停止,恢復並重新啓動。

我檢查過磁盤活動,網絡活動和他們沒有發生在那裏。

我正在運行WebSphere 6.1.0.27。