做了IT十多年,發現需要寫些文章來提高大家的水平。有幸培訓過不少人調優,並調試過多個大型上千萬的J2EE項目,總結了一些經驗,提供給大家。
如果一個系統出現性能問題,需要從上面四個方面來考察。
1、平臺
平臺包括內存和CPU。Java是比較喫內存的,如果內存很緊張,說明內存不夠。CPU的話,如果負載總大於75%,說明CPU很緊張。
2、Java虛擬機
很多人對這個不重視。其實,Java虛擬機是非常重要的。大家比較熟悉的和常用的是Sun的JVM。那爲什麼BEA用JRockit,IBM用自己的JVM?如果Sun的JDK很完美,我想BEA和IBM也不會花大把的銀子自己做個JVM。
以Sun的JVM 1.4比Sun的JVM 1.3快30%。
下圖是JRockit、Sun JDK 1.4.2、Sun JDK 1.4.1的比較。可以看出JRockit和Sun JDK 1.4.2持平,而Sun JDK1.4.1很差。
所以我們一定要看看自己用的JDK是多少版本,稍微一換,速度大幅提高。對Sun的JDK一定要用1.4.2。
另外JDK還有很多參數要調。
第一個就是-Xms -Xmx。
要記住-Xms -Xmx指的是圖中的堆的大小。物理內存被操作系統、JVM、其他程序和你的程序分享。根據我的經驗,一般-Xms設爲物理內存的1/4,-Xmx設爲物理內存的1/2
這個一定要設。比如安裝Weblogic,按照默認,用Sun的JDK,則爲-Xms32m -Xmx200m,你想200m那夠啊。1G的內存你可以用512m。對Tomcat,則沒設。這樣,你的程序會不斷分配內存、釋放內存,大大影響速度。如果併發用戶多,還會造成OutofMemory。
另外JVM還有很多參數,仔細研究,會提高不少速度。如對Sun JDK,採用UseTLAB,即線程局部分配內存,即分配內存的機制與C類似,會提高速度。這在IBM JDK中是默認的。
3、應用服務器
常用應用服務器包括Weblogic、WebSphere、Tomcat等,用好了都不錯。對於Tomcat,5.0會比4.1快很多,機制不一樣。對於Weblogic,那個weblogic.kernal.default線程的數量需要調,否則10幾個併發後就不行了。
Weblogic、WebSphere有調優的文檔,可以看看,大楷調的好,會有10%左右的提高,一般不用。但不要設置的不對,那就是錯誤。
4、程序
基本上性能慢都是程序寫的不好或有問題。前面講的都是傻瓜式的,稍微弄弄、注意點就好了。程序有問題,那纔是最不好查,也容易造成性能急劇下降的原因。
待續...