2008-11-14 73 views
4

我在Sun Application Server 8.1(又名SJSAS,Glassfish的前身)上運行了一個有點過時的Java EE應用程序。如果有500多位同時在線的用戶,應用程序的速度會變得難以接受,我正在幫助確定大部分執行時間花費在哪裏,以及如何加快執行速度。到目前爲止,我們一直在使用LoadRunner,應用服務器日誌,Oracle statpack,snoop,調整應用服務器接受者和會話(工作者)線程,調整Hibernate批量大小以及加入獲取使用等來進行實驗和測量,但是在初始獲益後我們正在努力改善事態。Java應用服務器性能

好的,通過這個問題的介紹,下面是一個真正的問題:如果您的CPU和內存使用率從未超過20%,並且運行500多個用戶的盒子上運行緩慢的Java EE應用程序,事情:1)在同一個應用程序服務器JVM進程中請求甚至是靜態文件的速度非常慢,2)請求應用程序服務器JVM進程之外但在同一個盒子上的靜態文件很快,你會調查什麼?

我的想法最初跳轉到應用程序服務器線程,包括acceptor和會話線程,都認爲即使是靜態文件請求正在排隊等待可用線程,並且如果CPU /內存沒有真正納稅,那麼更多線程是爲了。但之後我們大幅增加了接受者和會話線程,並且沒有任何改進。

澄清編輯:

1)靜態文件應該由Web服務器而不是應用服務器提供服務。我使用的事實,在我們的情況下,這(不幸)不是配置,這樣我可以看到它不執行文件的應用程序服務器的性能 - 因此不包括任何數據庫的性能成本等

2 )我認爲請求者和應用程序服務器之間沒有代理,但即使它看起來沒有被重載,因爲從同一應用程序服務器計算機請求但在應用程序的JVM實例外部立即返回的靜態文件。

3)JVM堆大小(XMX)被設置爲1GB。

感謝您的幫助!

+0

被代理的請求(通過Apache等),他們到達了SJSAS過嗎? – digitalsanctum 2008-11-14 15:42:06

+0

據我所知,請求沒有被代理。請求將直接從LoadRunner機器轉到應用程序服務器進程。但是,這是一個非常好的建議,以便確認,以便我毫不懷疑。我會在確認後發佈更新。謝謝!。 – jlpp 2008-11-14 15:45:27

回答

1

使用的是Sun的性能監控工具後,我們發現,垃圾收集器正在運行每隔幾秒鐘,這是正在使用的只有約100MB出1GB堆。所以我們試着增加下面的JVM選項,到目前爲止,這個新的配置大大提高了的性能。

-XX:+ DisableExplicitGC -XX:+ AggressiveHeap

http://java.sun.com/docs/performance/appserver/AppServerPerfFaq.html

我們的教訓:不要離開JVM選項調整和垃圾回收調整結束。如果您遇到性能問題,請在排查過程中儘早查看這些設置。

1

SunONE本身是一個痛苦的屁股。我有一個非常相同的問題,你知道嗎?將相同的應用程序簡單地重新部署到Weblogic,減少了大約30%的內存消耗和CPU消耗。

SUNONE是一個參考實現服務器,而不應該用於生產(不知道Glassfish的)。

我知道,這個答案並沒有真正的幫助,但我注意到,即使在一個非常簡單的操作相當的停頓,如從池中得到一個Bean實例。

可能,嘗試部署的JBoss或Weblogic的同一臺機器上會給你一個提示?

P.S.您不應該在應用程序服務器下提供靜態內容(儘管我有時也會這樣做,當CPU很豐富時)。

P.P.S. 500個併發用戶的負載相當高,我會將SunONE定義爲放置在緩存代理或服務靜態內容的Apache之後。