JavaEE程式在Glassfish的效能調優分析

來源:互聯網
上載者:User

 Java
EE應用的效能問題對嚴肅的項目和產品來說是一個非常重要的問題。特別是企業級的應用,並發使用者多,資料轉送量大,商務邏輯複雜,佔用系統資源多,因此性
能問題在企業級應用變得至關重要,它和系統的穩定性有著直接的聯絡。更加重要的是,效能好的應用在完成相同任務的條件下,能夠佔用更少的資源,獲得更好的
使用者體驗,換句話說,就是能夠節省費用和消耗,獲得更高的利潤。

  要獲得更好的效能,就需要對原來的系統進行效能調優。對運行在
Glassfish上的JavaEE應用,調優是一件相對複雜的事情。在調優以前必須要認識到:對JavaEE的系統,調優是多層次的。一個JavaEE
的應用其實是整個系統中很少的一部分。開發人員所開發的JavaEE程式,無論是JSP還是EJB,都是運行在JavaEE應用伺服器
(Glassfish)之上。而應用伺服器本身也是Java語言編寫的,需要運行在Java虛擬機器之上。Java虛擬機器也只不過是作業系統的一個應用而
已,和其他的應用(如Apache)對於作業系統來說沒有本質的區別。而作業系統卻運行在一定的硬體環境中,包括CPU,記憶體,網卡和硬碟等等。在這麼多
的層次中,每一個層次的因素都會影響整個系統的效能。因此,對一個系統的調優,事實上需要同時對每個層次都要調優。JavaEE應用效能調優不僅僅和
Glassfish有關,Java語言有關,還要和作業系統以及硬體都有關係,需要調優者有綜合的知識和技能。這些不同層面的方法需要綜合縱效,結合在一
起靈活使用,才能快速有效定位效能瓶頸。下面是一些具體的案例分析:

  記憶體流失問題

  某個JavaEE應用運行在8顆
CPU的伺服器上。上線運行發現效能不穩定。效能隨著時間的增加而越來越慢。通過作業系統的工具(mpstat),發現在系統很慢的時候,只有一顆CPU
很忙,其他的CPU都很空閑。因此懷疑是Java虛擬機器經常進行記憶體回收,因為虛擬機器在記憶體回收的時候,有的回收演算法通常只能運行在一個CPU上。通過
Java虛擬機器的工具“jstat”可以清楚的看到,Java虛擬機器進行記憶體回收的頻率非常高,幾乎每5秒中就有一次,每次回收的時間為2秒鐘。另外,通
過“jstat”的輸出還發現每次回收釋放的記憶體非常有限,大多數對象都無法回收。這種現象很大程度上暗示著記憶體流失。使用Java虛擬機器的工具
“jmap”來獲得當前的一個記憶體映象。發現有很多(超過10000)個的session對象。這是不正常的一個現象。一般來說,session對應於一
個使用者的多次訪問,當使用者退出的時候,session就應該失效,對象應該被回收。當我們和這個系統的開發工程師瞭解有關session的設定,發現當他
們部署應用的時候,竟然將session的timeout時間設定為50分鐘,並且沒有提供logout的介面。這樣的設定下,每個session的資料
都會儲存50分鐘才會被回收。根據我們的建議,系統提供了logout的連結,並且告訴使用者如果退出應用,應該點擊這個logout的連結;並且將
session的timeout時間修改為5分鐘。通過幾天的測試,證明泄漏的問題得到解決。

  資料庫


串連池問題

 
 某財務應用運行在JavaEE伺服器上,後台串連Oracle資料庫。並發使用者數量超過100人左右的時候系統停止回應。通過作業系統層面的進程監控工
具發現進程並沒有被殺死或掛起,而CPU使用率幾乎為零。那麼是什麼原因導致系統停止回應使用者請求呢?我們利用Java虛擬機器的工具(kill -3
pid)將當前的所有線程狀態DUMP出來,發現JavaEE伺服器的大部分處理線程都在等待資料庫連接池的串連,而那些已經獲得資料庫連接的線程卻處於
阻塞狀態。資料庫管理


員
應要求檢查了資料庫的狀態,發現所有的串連的session都處於死結狀態。顯然,這是因為資料庫端出現了死結的操作,阻塞了那些有資料庫操作的請求,占
用了所有資料庫連接池中的串連。後續的請求如果還要從串連池中擷取串連,就會阻塞在串連池上。當解決資料庫死結的問題之後,效能問題迎刃而解。

  大對象緩衝問題

 
 電信應用運行在64位Java虛擬機器上,系統運行得很不穩定,系統經常停止回應。使用進程工具查看,發現進程並沒有被殺死或掛起。利用Java虛擬機器的
工具發現系統在長時間的進行記憶體回收,記憶體回收的時間長達15分鐘,整個系統在記憶體回收的時候就像掛起一樣。另外還觀察到系統使用了12G的記憶體(因為是
64位虛擬機器所以突破了4G記憶體的限制)。從開發人員那裡瞭解到,這個應用為了提高效能,大量使用了對象緩衝,但是事與願違,在Java中使用過多的內
存,雖然在正常啟動並執行時候能夠獲得很好的效能,但是會大大增加記憶體回收的時間。特別是對象緩衝,本系統使用了8G的緩衝空間,共緩衝了6000多萬個對
象,對這些對象的遍曆導致了長時間的記憶體回收。根據我們的建議,將緩衝空間減少到1G,並調整回收演算法(使用增量回收的演算法),使得系統由於記憶體回收而造
成的最大停頓時間減少到4秒,基本滿足使用者的需求。

  外部命令問題

  數字校園應用運行在4CPU的Solaris10服
務器上,中介軟體為JavaEE伺服器。系統在做大並發壓力測試的時候,請求回應時間比較慢,通過作業系統的工具(mpstat)發現CPU使用率比較高。
並且系統佔用絕大多數的CPU資源而不是應用本身。這是個不正常的現象,通常情況下使用者應用的CPU佔用率應該佔主要地位,才能說明系統是正常工作。通過
Solaris
10的Dtrace指令碼,我們查看當前情況下哪些系統調用花費了最多的CPU資源,竟然發現最花費CPU的系統調用是“fork”。眾所周
知,“fork”系統調用是用來產生新的進程,在Java虛擬機器中只有線程的概念,絕不會有進程的產生。這是個非常異常的現象。通過本系統的開發人員,我
們找到了答案:每個使用者請求的處理都包含執行一個外部shell指令碼,來獲得系統的一些資訊。這是通過Java的
“Runtime.getRuntime().exec”來完成的,但是這種方法在Java中非常消耗資源。Java虛擬機器執行這個命令的方式是:首先克
隆一個和當前虛擬機器一樣的進程,再用這個新的進程去執行外部命令,最後再退出這個進程。如果頻繁執行這個操作,系統的消耗會很大,不僅在CPU,記憶體操作
也很重。使用者根據建議去掉這個shell指令碼執行的語句,系統立刻回複了正常。

  檔案操作問題

  內容管理(CMS)系統
運行在JavaEE伺服器上,當系統長時間運行以後,效能非常差,使用者請求的延時比系統剛上線的時候要大很多,並且使用者的並發量很小,甚至是單個使用者也很
慢。通過作業系統的工具觀察,一切都很正常,CPU利用率不高,IO也不是很大,記憶體很富餘,網路幾乎沒有壓力(因為並發使用者少)。先不考慮線程互鎖的問
題,因為單個使用者效能也不好。通過Java虛擬機器觀察也沒有發現什麼問題(記憶體回收很少發生)。這使得我們不得不使用代碼跟蹤器來全程跟蹤代碼。我們採用
了Netbeans的Profiler,跟蹤的結果非常意外,使用者請求的90%的時間在建立新檔案。從系統設計人員瞭解到,此系統使用了一個目錄用於儲存
所有上傳和共用的檔案,檔案用其命名方式來唯一區別於其他檔案。我們查看了那個檔案目錄,發現該目錄下已經擁有80萬個檔案了。這時候我們才定位到問題
了:在同個目錄下放置太多的檔案,在建立新檔案的時候,系統的開銷是比較大的,例如為了防止重名,檔案系統會遍曆目前的目錄下所有的檔案名稱等等。根據我們的
建議,將檔案分類儲存在不同的目錄下,效能有了大幅度的提高。

  快取命中率問題

  運行在JavaEE伺服器上的
ERP系統,在CPU充分利用的情況下效能仍然不太好。從作業系統層面上觀察不到什麼大問題,而且ERP系統過於複雜,代碼跟蹤比較困難。於是進行了
CPU狀態的進一步檢查,發現CPU的TLB命中率不是很高,於是對Java虛擬機器的啟動參數進行了修改,強迫虛擬機器使用大尺寸的記憶體頁面,提高TLB的
命中率。下面的參數是在Sun的HOTSPOT中調整大尺寸(4M)頁面的設定:

  -XX:+AggressiveHeap

  -XX:LargePageSizeInBytes=256m

  通過調整,TLB命中明顯提高,效能也得到近40%的提升。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.