熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Apusic應用服務器的性能調節

2022-06-13   來源: Java核心技術 

  Apusic應用服務器作為企業應用的運行平台系統的性能非常重要當應用對性能的要求比較苛刻時就要考慮是否需要改變系統的缺省設置來提升服務器的性能首先應該考慮系統的硬件環境(CPU主頻高低內存大小硬盤轉速及網絡傳輸速率等)是否能滿足應用的需求對於復雜的大型分布式企業應用硬件環境不應該僅僅滿足Apusic應用服務器的最低要求配置而應該提高硬件配置使應用運行的綽綽有余如CPU和內存的使用率都不應大於另一方面改變軟件環境的配置參數對於性能的影響也非常顯著本文就將介紹如何優化軟件環境配置來提高系統性能分為兩個方面Java虛擬機(JVM)的性能優化和Apusic應用服務器配置的優化
  
  Java虛擬機(JVM)的性能優化
  Java體系結構由四個不同卻又相互關聯的部分組成語言本身class文件格式JavaAPI庫和JVM當執行一個Java程序時源代碼是用Java語言寫成它被編譯成class文件格式運行在JVM中同時Java程序調用JavaAPI庫的方法訪問系統資源JVM和JavaAPI庫形成了編譯和運行環境就叫做Java平台JVM是基於堆棧的(stackbased)而不象匯編語言是基於寄存器的(registerbased)JVM是一個動態堆棧基礎上的抽象的計算機體系結構提供了pushpop來操作數據JVM的主要功能是裝載class文件執行字節碼java平台的執行工作量分為四個部分
  
  .字節碼的執行JVM花費大概一半的時間來解釋字節碼
  
  .Garbagecollection(垃圾回收)
  
  .線程管理
  
  .動態操作類裝載綁定檢查安全檢查動態類裝載異常捕獲反射機制本地方法的翻譯
  
  其中對象的垃圾回收會占用運行時間造成程序的短暫中斷
  
  我們可以通過命令行方式來啟動Apusic服務器這樣就可以有選擇的設置命令行參數使用命令行參數的主要目的是選擇Java程序使用的JVM類型和JVM運行時占用堆內存的分配策略
  
  使用HotSpot
  HotSpotJVM作為javaSDK的一個附加模塊使用了stateoftheart技術大大的提高了系統性能
  
  .適應編譯HotSpotJVM會在程序的運行過程中分析性能的瓶頸(hotspots然後編譯這些和性能提高最緊密的部分
  
  .改善的Garbagecollection
  
  .線程同步優化
  
  HotSpotJVM使用兩個機器字(twomachineword)作為對象的header而不象大多數JVM使用三個機器字這樣大約可以節省%的堆內存空間加速了對所有對象的掃描
  
  HotSpotJVM也丟棄了handle的概念對象引用的實現是通過直接指針減少了內存的使用和提高了處理速度訪問實例變量象C語言一樣的高效
  
  可以去下載JavaHotSpotTMServerVM執行安裝即可如果需要可以針對jdk和jre分別進行安裝
  
  HotSpotJVM分為client和server版本分別針對典型的客戶端應用程序和服務器端應用進行了優化Jdk安裝後就包含了JavaHotSpotClientVM上面安裝的是JavaHotSpotServerVM
  
  可以通過命令行參數選擇要使用的JVM
  
  &#;javaserverJavaHotSpotServerVM
  
  &#;javahotspot:JavaHotSpotClientVM
  
  &#;javaclassicJavaClassicVM
  
  缺省情況是使用HotSpotClientVM可以用javaserverversion來查看版本信息確定是否以正確安裝
  
  只要針對不同的應用選擇Client或ServerHotSpotVM對於Serverside應用有時性能會提高只要簡單的在命令行啟動Server時加上server
  
  GarbageCollection
  HotSpotJVM提供了三種類型的垃圾回收算法分別是
  
  .Copy/scavengecollection
  
  .Markcompactcollection
  
  .Incremental(train)collection
  
  具體的含義我不解釋了有興趣可以查看相關的文檔
  
  一個JVM的吞吐量是指除去GC消耗的時間占總執行時間的百分比因此%的吞度量就是說GC消耗了%的JVM處理時間當你的應用程序運行時JVM的GC會造成程序的暫停
  
  堆內存被分成了new和old兩部分如下圖
  
  new部分包括新創建對象區和兩個survivor區(SS#和SS#新創建的對象分配內存在new中長時間存活的對象被移動到了old部分Perm是一個永久區域分配給JVM本省可以通過命令行參數XX:MaxPermSize=m來設置
  
  當new被填滿後會觸發輔助GC把存在足夠長時間的對象移動到old中當old中也被填滿了會觸發GC將遍歷堆內存中的所有對象可以看出GC會消耗更多的時間足夠大的new會適合需要大量創建存在時間很短的對象而old如果不夠大會頻繁的觸發GC大大降低了性能所以我們的任務就是如何設置堆內存的大小以及如何規劃new和old區域的比例來適合我們應用
  
  輔助GC使用Copy/scavengecollection算法GC使用Markcompactcollection
  
  Heap分配策略
  通過命令行參數我們可以設置堆的大小和分配newold的比例一些常用參數如下
  
  詳細的參數設置請參看相關的文檔
  
  如何來規劃我們的堆內存分配策略呢?沒有一個明確詳細的規定只能根據我們具體的應用進行調節使性能達到最優化這種優化方法不需要程序員改變代碼但有時效果會很明顯下面總結了一些操作建議
  
  &#;如果GC成為了瓶頸請定制你的堆內存分配
  
  &#;分配盡可能多的內存給JVM但如果過多會引起內存和硬盤之間的交換反而降低的性能你可以分配%的可用RAM給JVM
  
  &#;如果是ServerSide應用請加server參數這樣缺省的NewRatio是SurvivorRatio是適合大部分應用也可以用NewSizeMaxNewSize來設置
  
  &#;設置Xms和Xmx的大小相等可以避免在每次GC後調整堆內存的大小&#;同樣道理設置NewSizeMaxNewSize相等
  
  &#;new的大小最好不要大於old的一半
  
  例如可以通過下面的命令行啟動Apusic服務器
  
  javaserverXX:NewSize=mXX:MaxNewSize=mXX:SurvivorRatio=XmsmXmxmcomapusicserverMain
  
  Apusic應用服務器配置的優化
  下面主要說明Apusic中的兩個文件影響性能的參數說明(這兩個文件放在%APUSIC_HOME%\config目錄中)及數據庫中的設置
  
  nf
  
  把其中兩個參數修改為
  
  MaxClients參數值設置的目的是防止拒絕服務攻擊當參數值設置較小時可以限制服務流量起到防止拒絕服務攻擊的作用但是當訪問的用戶較多時而此參數設置較小時卻會影響性能一般情況下不考慮防止拒絕服務攻擊此參數設置為表示服務流量沒有限制
  MaxWaitingClients與MaxClients有類似的功能他表示當許多並發用戶訪問時可允許等待的最大客戶服務數一般情況下不考慮防止拒絕服務攻擊此參數設置為較大的數如果設置較小當等待響應的並發服務隊列數超過使得一些服務得不到響應從而丟失一些響應結果
  
  datasourcesxml
  minspareconnections指連接池最小容量
  
  maxspareconnections指連接池最大容量
  
  stmtcachesize指語句緩存容量
  
  resultsetcachesize指結果集緩存容量
  
  resultsetcachetimeout指結果集緩存超時配置如下……
  
  連接池最小容量也就是初始連接數此值不宜設置太小太小須不斷建立連接也不宜設置太大太大消耗資源
  
  連接池最大容量連接池中可容納的最大連接數當連接池中的連接數不夠用時需要等待其他的被使用的連接得到釋放才能使用否則只能等待根據應用的實際情況設置此值
  語句緩存容量對所執行的語句進行緩存當再次執行此語句時不必重新編譯從而提高了性能根據機器內存的大小適當設置此值
  
  結果集緩存容量把所得到的結果集進行緩存當再次使用此結果集時不必再次從數據庫中取得而可以直接從緩存中取得從而提高性能根據機器內存的大小適當設置此值
  結果集緩存超時結果集過期時間此時間不宜設置過長以免浪費資源
  
  注語句緩存容量結果集緩存容量結果集緩存超時參數主要針對Oracle數據庫來設計的
  
  通過適當的調節Java虛擬機和Apusic的配置文件可以顯著的提升系統的性能在一些具體的應用中還能夠通過增加實例池加大Cached改變並發策略等方法來改善系統的整體性能開發人員只要經過不斷的總結就可以在Apusic應用服務器上開發出穩定而又高性能的企業應用

From:http://tw.wingwit.com/Article/program/Java/hx/201311/26290.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.