我在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。
感謝您的幫助!
被代理的請求(通過Apache等),他們到達了SJSAS過嗎? – digitalsanctum 2008-11-14 15:42:06
據我所知,請求沒有被代理。請求將直接從LoadRunner機器轉到應用程序服務器進程。但是,這是一個非常好的建議,以便確認,以便我毫不懷疑。我會在確認後發佈更新。謝謝!。 – jlpp 2008-11-14 15:45:27