筆記:Java 性能優化權威指南 第九、十、11章 GlassFish、Web應用、Web Service、EJB性能調優

1、GlassFish調優數據庫


一、網絡調優緩存

建立套接字鏈接池,適當重用這些鏈接,而不是每一個請求建立一個鏈接;設置適當的超時時間,一旦這些資源佔用不頻繁,就能夠釋放。安全


二、JDBC 執行時間:服務器

 利用動態Java追蹤工具BTrace ,能夠查找出慢速的數據庫交互。網絡


三、磁盤IOsession

服務器日誌設置爲所需最小級別。app

將事務日誌文件配置到快速磁盤上或者有寫緩存的磁盤陣列上,避免事務管理器在事務日誌寫入時候致使磁盤瓶頸。jsp

JMS消息也最好保存到SSD或有寫緩存的磁盤陣列。分佈式


四、資源池memcached

資源池須要調優的參數:最小、穩定狀態和最大鏈接數。

通用準則:最大值爲HTTP Worker 線程池的最大值,穩定態的池大小爲CPU核數。

監控池中空閒鏈接數、等待鏈接個數,調節池大小。若是空閒數一直爲0,等待數一直大於0,則說明池過小。


2、Web 容器調優


一、容器模式

默認是開發模式,正式調整爲生成模式。


二、安全管理器

開啓安全管理器會有性能代價


三、JVM調優

指定server模式,使用CMS收集器。若是須要分佈式垃圾收集,則不要禁用System.gc().


四、HTTP監聽器


(1)、線程池

初始線程數 MinCount 爲CPU核數,線程數Count爲2*CPU核數;監控工做線程數BusyCount,配置最大線程數MaxCount=BusyCount


(2)、Acceptor:

設置Selector 的 acceptor-threads爲處理器數;

監控隊列中鏈接數、最近平均排隊鏈接數、隊列中被拒絕數調節最大鏈接數

監控keep-alive的鏈接數、命中緩存數、拒絕數、超時數調節超時時間,最大鏈接

監控Http 的狀態碼,改正錯誤;將請求轉換到新地址比重定向的性能好;


3、Web應用調優

一、使用Servlet 的init() 方法執行代價昂貴的一次性操做。

二、<%@include file="" %> 是靜態引用資源;<jsp:include page="" /> 動態生成響應。

三、剔除多餘空格,壓縮JS 和CSS 。

四、設置JavaBean的合適範圍:page、request、session、application。

五、el表達式取代Scriptlet

六、HTTP壓縮:配置http-listener 的壓縮屬性Compression、comprehensiveMimeType、comprehensiveMinSize

七、內容緩存:如放在memcached 中。

八、session持久化:默認session保持在內存中,可保持在分佈式緩存如Redis中。

九、靜態文件緩存:放在Apache中,不在JVM內存中。


4、Web Service 性能調優

書中基於SOAP


5、EJB 性能調優

一、ORB線程池:初始設置最小容量爲處理器數量,最大容量爲2*處理器數量,監控用於處理的請求數、等待處理的請求數進行調節。

二、EJB緩存:根據緩存命中率調節。

三、事務屬性:Required、Required New、Mandatory、Not Supported、Supports、Never。通常使用Required。

四、控制反序列化:用transient 標記不須要序列化的字段。

五、緩存靜態資源:數據源、JMS對象、JNDI查詢的會話Bean

六、Local接口替代Remote接口

七、樂觀鎖替代悲觀鎖

八、緩存查詢結果

九、 FetchType:FetchType.LAZY 延遲加載,   FetchType.EAGER 提早載入

十、鏈接池:鏈接池的數量至少等於處理請求數的線程數

十一、批量更新:避免在循環中操做數據庫,一個使用SQL語句完成。

十二、讀取時候不帶事務:TransactionAttributeType.SUPPORTS

1三、實體Bean 使用繼承

相關文章
相關標籤/搜索