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 使用繼承