首先,只是有點背景: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更好地閒置可能會負面影響「真正」的工作量做。
這個客戶i系列與您的其他客戶處於同一水平嗎?是否有其他差異,使這一個獨特? – Ichorus 2009-05-01 17:36:24
是的,它是相同的水平。它也發生在WebSphere 5.1以及6.1 – 2009-05-05 08:07:10