国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Apusic應(yīng)用服務(wù)器的性能調(diào)節(jié)_JVM優(yōu)化

2019-11-18 12:14:10
字體:
供稿:網(wǎng)友

  Apusic應(yīng)用服務(wù)器作為企業(yè)應(yīng)用的運行平臺,系統(tǒng)的性能非常重要。當(dāng)應(yīng)用對性能的要求比較苛刻時,就要考慮是否需要改變系統(tǒng)的缺省設(shè)置來提升服務(wù)器的性能。首先應(yīng)該考慮系統(tǒng)的硬件環(huán)境(CPU主頻高低、內(nèi)存大小、硬盤轉(zhuǎn)速及網(wǎng)絡(luò)傳輸速率等)是否能滿足應(yīng)用的需求。對于復(fù)雜的大型分布式企業(yè)應(yīng)用,硬件環(huán)境不應(yīng)該僅僅滿足Apusic應(yīng)用服務(wù)器的最低要求配置,而應(yīng)該提高硬件配置使應(yīng)用運行的綽綽有余,如CPU和內(nèi)存的使用率都不應(yīng)大于80%。另一方面,改變軟件環(huán)境的配置參數(shù)對于性能的影響也非常顯著。本文就將介紹如何優(yōu)化軟件環(huán)境配置來提高系統(tǒng)性能,分為兩個方面:java虛擬機(jī)(JVM)的性能優(yōu)化和Apusic應(yīng)用服務(wù)器配置的優(yōu)化。
  
  Java虛擬機(jī)(JVM)的性能優(yōu)化
  Java體系結(jié)構(gòu)由四個不同卻又相互關(guān)聯(lián)的部分組成:語言本身、class文件格式、JavaAPI庫和JVM。當(dāng)執(zhí)行一個Java程序時,源代碼是用Java語言寫成,它被編譯成class文件格式,運行在JVM中。同時,Java程序調(diào)用JavaAPI庫的方法,訪問系統(tǒng)資源。JVM和JavaAPI庫形成了編譯和運行環(huán)境,就叫做Java平臺。JVM是基于堆棧的(stack-based),而不象匯編語言是基于寄存器的(registerbased)。JVM是一個動態(tài)堆棧基礎(chǔ)上的抽象的計算機(jī)體系結(jié)構(gòu),提供了push、pop來操作數(shù)據(jù)。JVM的主要功能是裝載class文件,執(zhí)行字節(jié)碼。java平臺的執(zhí)行工作量分為四個部分:
  
  1.字節(jié)碼的執(zhí)行:JVM花費大概一半的時間來解釋字節(jié)碼。
  
  2.Garbagecollection(垃圾回收)
  
  3.線程治理
  
  4.動態(tài)操作:類裝載、綁定檢查、安全檢查、動態(tài)類裝載、異常捕捉、反射機(jī)制、本地方法的翻譯
  
  其中,對象的垃圾回收會占用運行時間,造成程序的短暫中斷。
  
  我們可以通過命令行方式來啟動Apusic服務(wù)器,這樣就可以有選擇的設(shè)置命令行參數(shù)。使用命令行參數(shù)的主要目的是:選擇Java程序使用的JVM類型和JVM運行時占用堆內(nèi)存的分配策略。
  
  使用HotSpot
  HotSpotJVM作為java2SDK的一個附加模塊,使用了state-of-the-art技術(shù)大大的提高了系統(tǒng)性能:
  
  1.適應(yīng)編譯:HotSpotJVM會在程序的運行過程中分析性能的瓶頸("hotspots"),然后編譯這些和性能提高最緊密的部分。
  
  2.改善的Garbagecollection
  
  3.線程同步優(yōu)化
  
  HotSpotJVM使用兩個機(jī)器字(two-machine-Word)作為對象的header,而不象大多數(shù)JVM使用三個機(jī)器字,這樣大約可以節(jié)省10%的堆內(nèi)存空間,加速了對所有對象的掃描。
  
  HotSpotJVM也丟棄了handle的概念,對象引用的實現(xiàn)是通過直接指針,減少了內(nèi)存的使用和提高了處理速度。訪問實例變量象C語言一樣的高效。
  
  可以去http://java.sun.com/PRodUCts/hotspot/2.0/download.Html下載JavaHotSpotTMServerVM2.0,執(zhí)行安裝即可。假如需要可以針對jdk和jre分別進(jìn)行安裝。
  
  HotSpotJVM分為client和server版本,分別針對典型的客戶端應(yīng)用程序和服務(wù)器端應(yīng)用進(jìn)行了優(yōu)化。Jdk1.3安裝后就包含了JavaHotSpotClientVM,上面安裝的是JavaHotSpotServerVM。
  
  可以通過命令行參數(shù)選擇要使用的JVM:
  
  •java-server:JavaHotSpotServerVM
  
  •java-hotspot:JavaHotSpotClientVM
  
  •java-classic:Java2ClassicVM
  
  缺省情況是使用HotSpotClientVM。可以用java-server-version來查看版本信息,確定是否以正確安裝。
  
  只要針對不同的應(yīng)用,選擇Client或ServerHotSpotVM。對于Server-side應(yīng)用,有時性能會提高20%,只要簡單的在命令行啟動Server時加上-server。
  
  GarbageCollection
  HotSpotJVM提供了三種類型的垃圾回收算法,分別是:
  
  1.Copy/scavengecollection
  
  2.Mark-compactcollection
  
  3.Incremental(train)collection
  
  具體的含義我不解釋了,有愛好可以查看相關(guān)的文檔。
  
  一個JVM的吞吐量是指除去GC消耗的時間占總執(zhí)行時間的百分比。因此,80%的吞度量就是說GC消耗了20%的JVM處理時間。當(dāng)你的應(yīng)用程序運行時,JVM的GC會造成程序的暫停。
  
  堆內(nèi)存被分成了new和old兩部分,如下圖:
  
  new部分包括新創(chuàng)建對象區(qū)和兩個survivor區(qū)(SS#1和SS#2),新創(chuàng)建的對象分配內(nèi)存在new中,長時間存活的對象被移動到了old部分。Perm是一個永久區(qū)域,分配給JVM本省,可以通過命令行參數(shù)-XX:MaXPermSize=64m來設(shè)置。
  
  當(dāng)new被填滿后,會觸發(fā)"輔助"GC,把存在足夠長時間的對象移動到old中。當(dāng)old中也被填滿了,會觸發(fā)"主"GC,將遍歷堆內(nèi)存中的所有對象。可以看出,"主"GC會消耗更多的時間。足夠大的new會適合需要大量創(chuàng)建存在時間很短的對象,而old假如不夠大會頻繁的觸發(fā)"主"GC,大大降低了性能。所以,我們的任務(wù)就是如何設(shè)置堆內(nèi)存的大小以及如何規(guī)劃new和old區(qū)域的比例來適合我們應(yīng)用。
  
  "輔助"GC使用Copy/scavengecollection算法,"主"GC使用Mark-compactcollection。
  
  Heap分配策略
  通過命令行參數(shù),我們可以設(shè)置堆的大小和分配"new"、"old"的比例。一些常用參數(shù)如下:
  
  具體的參數(shù)設(shè)置請參看相關(guān)的文檔。
  
  如何來規(guī)劃我們的堆內(nèi)存分配策略呢?沒有一個明確具體的規(guī)定,只能根據(jù)我們具體的應(yīng)用進(jìn)行調(diào)節(jié),使性能達(dá)到最優(yōu)化。這種優(yōu)化方法不需要程序員改變代碼,但有時效果會很明顯。下面總結(jié)了一些操作建議:
  
  •假如GC成為了瓶頸,請定制你的堆內(nèi)存分配
  
  •分配盡可能多的內(nèi)存給JVM。但假如過多,會引起內(nèi)存和硬盤之間的交換,反而降低的性能。你可以分配80%的可用RAM給JVM。
  
  •假如是Server-Side應(yīng)用,請加-server參數(shù)。這樣,缺省的NewRatio是2,SurvivorRatio是25,適合大部分應(yīng)用。也可以用NewSize、MaxNewSize來設(shè)置。
  
  •設(shè)置-Xms和-Xmx的大小相等,可以避免在每次GC后調(diào)整堆內(nèi)存的大小。•同樣道理設(shè)置NewSize、MaxNewSize相等。
  
  •"new"的大小最好不要大于"old"的一半。
  
  例如,可以通過下面的命令行啟動Apusic服務(wù)器:
  
  java-server-XX:NewSize=128m-XX:MaxNewSize=128m-XX:SurvivorRatio=8-Xms512m-Xmx512mcom.apusic.server.Main
  
  Apusic應(yīng)用服務(wù)器配置的優(yōu)化
  下面主要說明Apusic中的兩個文件影響性能的參數(shù)說明(這兩個文件放在%APUSIC_HOME%/config目錄中)及數(shù)據(jù)庫中的設(shè)置。
  
  apusic.conf
  
  把其中兩個參數(shù)修改為:
  
  MaxClients參數(shù)值設(shè)置的目的是防止拒絕服務(wù)攻擊。當(dāng)參數(shù)值設(shè)置較小時可以限制服務(wù)流量,起到防止拒絕服務(wù)攻擊的作用,但是當(dāng)訪問的用戶較多時而此參數(shù)設(shè)置較小時卻會影響性能。一般情況下,不考慮防止拒絕服務(wù)攻擊,此參數(shù)設(shè)置為-1,表示服務(wù)流量沒有限制。
  MaxWaitingClients:與MaxClients有類似的功能,他表示當(dāng)許多并發(fā)用戶訪問時,可答應(yīng)等待的最大客戶服務(wù)數(shù)。一般情況下,不考慮防止拒絕服務(wù)攻擊,此參數(shù)設(shè)置為較大的數(shù),如10000,假如設(shè)置較小,如50,當(dāng)?shù)却憫?yīng)的并發(fā)服務(wù)隊列數(shù)超過50時,使得一些服務(wù)得不到響應(yīng),從而丟失一些響應(yīng)結(jié)果。
  
  datasources.xml
  min-spare-connections:指連接池最小容量
  
  max-spare-connections:指連接池最大容量
  
  stmt-cache-size:指語句緩存容量
  
  resultset-cache-size:指結(jié)果集緩存容量
  
  resultset-cache-timeout:指結(jié)果集緩存超時配置如下:……
  
  連接池最小容量:也就是初始連接數(shù),此值不宜設(shè)置太小,太小須不斷建立連接。也不宜設(shè)置太大,太大消耗資源。
  
  連接池最大容量:連接池中可容納的最大連接數(shù),當(dāng)連接池中的連接數(shù)不夠用時,需要等待其他的被使用的連接得到釋放,才能使用,否則只能等待。根據(jù)應(yīng)用的實際情況設(shè)置此值。
  語句緩存容量:對所執(zhí)行的語句進(jìn)行緩存,當(dāng)再次執(zhí)行此語句時,不必重新編譯,從而提高了性能。根據(jù)機(jī)器內(nèi)存的大小適當(dāng)設(shè)置此值。
  
  結(jié)果集緩存容量:把所得到的結(jié)果集進(jìn)行緩存,當(dāng)再次使用此結(jié)果集時,不必再次從數(shù)據(jù)庫中取得,而可以直接從緩存中取得,從而提高性能。根據(jù)機(jī)器內(nèi)存的大小適當(dāng)設(shè)置此值。
  結(jié)果集緩存超時:結(jié)果集過期時間,此時間不宜設(shè)置過長,以免浪費資源。
  
  注:語句緩存容量、結(jié)果集緩存容量、結(jié)果集緩存超時參數(shù)主要針對Oracle數(shù)據(jù)庫來設(shè)計的。
  
  通過適當(dāng)?shù)恼{(diào)節(jié)Java虛擬機(jī)和Apusic的配置文件,可以顯著的提升系統(tǒng)的性能。在一些具體的應(yīng)用中,還能夠通過增加實例池、加大Cached、改變并發(fā)策略等方法來改善系統(tǒng)的整體性能。開發(fā)人員只要經(jīng)過不斷的總結(jié),就可以在Apusic應(yīng)用服務(wù)器上開發(fā)出穩(wěn)定而又高性能的企業(yè)應(yīng)用。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 子洲县| 大冶市| 怀仁县| 元谋县| 临夏县| 池州市| 沾益县| 绿春县| 高台县| 广饶县| 旅游| 双峰县| 涡阳县| 泗水县| 台北市| 利津县| 泰州市| 宝坻区| 涟源市| 东莞市| 阳山县| 德安县| 大邑县| 汤阴县| 遂昌县| 二连浩特市| 渭南市| 揭西县| 当涂县| 巴马| 郓城县| 鄂托克前旗| 奉化市| 米泉市| 南安市| 天长市| 灌南县| 高碑店市| 佛冈县| 清水河县| 五家渠市|