JAVA WEB系統(tǒng)性能調(diào)優(yōu)_第1頁
JAVA WEB系統(tǒng)性能調(diào)優(yōu)_第2頁
JAVA WEB系統(tǒng)性能調(diào)優(yōu)_第3頁
JAVA WEB系統(tǒng)性能調(diào)優(yōu)_第4頁
JAVA WEB系統(tǒng)性能調(diào)優(yōu)_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 JAVA WEB系統(tǒng)性能調(diào)優(yōu)JAVA WEB系統(tǒng)性能調(diào)優(yōu)V1.0廣州合道信息科技有限公司2014年3月² 文檔信息項目名: 項目編號: 作者: 羅承偉創(chuàng)建日期: 2014-03-21使用者: 標(biāo)題: Javaweb 系統(tǒng)性能調(diào)優(yōu)方案分類: 部門名稱: 研發(fā)部版權(quán)聲明: ² 文檔狀態(tài)文檔狀態(tài)草稿正式文檔評審人員評審組組長:評審組成員: 評審時間² 修訂文檔歷史記錄日期版本說明作者2014-03-21V1.0初稿羅承偉目錄1. 性能調(diào)優(yōu)流程41.1、確定調(diào)優(yōu)目標(biāo)41.2、測量系統(tǒng)性能51.3、分析性能瓶頸52. JVM性能調(diào)優(yōu)52.1、JVM內(nèi)存組成及分配62.1.

2、1、JAVA內(nèi)存組成介紹:堆(Heap)和非堆(Non-heap)內(nèi)存62.1.2、堆內(nèi)存分配62.1.3、非堆內(nèi)存分配72.1.4、JVM內(nèi)存限制(最大值)82.2、JVM參數(shù)詳解82.3、參數(shù)配置示例143. J2EE應(yīng)用監(jiān)控153.1、數(shù)據(jù)庫連接池監(jiān)控(Druid)153.1.1、Druid連接池配置153.1.2、Druid連接池監(jiān)控173.2、容器管理及監(jiān)控(psi-probe)183.2.1、Tomcat下安裝部署183.2.2、probe監(jiān)控界面223.3、JAVA虛擬機監(jiān)控(Visual VM)253.3.1、VisualVM安裝253.3.2、VisualVM簡介253.3.

3、3、安裝插件263.3.4、監(jiān)控本地JAVA應(yīng)用273.3.5、監(jiān)控遠(yuǎn)程JAVA應(yīng)用283.3.6、使用Visual VM查看JVM相關(guān)信息313.3.7、使用Visual VM解決內(nèi)存溢出問題333.3.8、使用Visual VM查看Tomcat的線程狀態(tài)343.3.8、使用Visual VM查看CPU消耗情況361. 性能調(diào)優(yōu)流程性能調(diào)優(yōu)無疑是個龐大且復(fù)雜的話題,也是項目中非常重要的一環(huán)。由于性能調(diào)優(yōu)涵蓋的面實在是太多了,我們僅看看性能調(diào)優(yōu)過程中常見的一些做法。1.1、確定調(diào)優(yōu)目標(biāo)性能調(diào)優(yōu),首先是要確定性能調(diào)優(yōu)的目標(biāo)是什么,如果現(xiàn)在應(yīng)用已經(jīng)滿足了需求,就沒必要去做性能調(diào)優(yōu)了,畢竟不經(jīng)過一個

4、系統(tǒng)的過程,其實是無法確定你所做的性能調(diào)整是否真的調(diào)優(yōu)了性能,是否沒有造成應(yīng)用中其他的問題,所以確定性能目標(biāo)是非常重要的,在定義性能目標(biāo)的時候通常這么定義的呢:1 最大并發(fā)數(shù)2 Quality of Service 服務(wù)的質(zhì)量,在軟件系統(tǒng)方面我們認(rèn)為主要表現(xiàn)在請求的出錯率,系統(tǒng)的load等。3 最長響應(yīng)時間 對于任何請求所能承受的最大響應(yīng)時間。4 TPS 每秒需要支持的最大事務(wù)數(shù),最典型的指標(biāo)是:“某頁面最高需要支撐每秒3000次 的訪問次數(shù)”。例如一個web系統(tǒng),需要定義出來的目標(biāo)是:并發(fā)目標(biāo):最高支撐200并發(fā);QoS:出錯率須控制在萬分之一,系統(tǒng)的load最高只能到達(dá)10;TPS:每秒完

5、成3000次請求的處理;最大響應(yīng)時間:最長允許的響應(yīng)時間為5秒。至于請求的平均響應(yīng)時間這些就不在性能調(diào)優(yōu)目標(biāo)中定義,因為要達(dá)到TPS的要求,響應(yīng)時間是必須要達(dá)到一個級別的,而且響應(yīng)時間隨著高并發(fā)是會出現(xiàn)劣化的。當(dāng)然,還可以把性能指標(biāo)定到更為細(xì)節(jié),例如某個方法的TPS在100并發(fā)時需要達(dá)到多少。在確定好了性能目標(biāo)后,重要的就是如何來測量系統(tǒng)的性能了。1.2、測量系統(tǒng)性能對于新系統(tǒng)而言,需要評估出其正式運行時的數(shù)據(jù)量的增長情況;而對于已運行的系統(tǒng),則需要根據(jù)監(jiān)控獲取到系統(tǒng)的運行數(shù)據(jù)(例如高峰并發(fā)數(shù)、系統(tǒng)的響應(yīng)速度情況、系統(tǒng)的load、網(wǎng)絡(luò)流量、每類請求在總的請求中所占的百分比等)。新系統(tǒng)而言,要評

6、估出具體的性能相對來說稍微好做一點,因為此時系統(tǒng)通常較為單純,數(shù)據(jù)量的增長也不可能是一夜之間增長的,因此基本可以按照一種正常的方法在測試環(huán)境評估出其正式運行的性能。而對于已運行的系統(tǒng)而言,則較為麻煩,因為通常來講要在測試環(huán)境中模擬正式運行環(huán)境基本是不太可能的,因此這個時候通常要采取一些模擬的方法或更高壓力的方法來盡量更為準(zhǔn)確的評估出系統(tǒng)的性能。在測試系統(tǒng)性能時,通??刹捎玫姆椒ㄓ校? 單元測試 可借助單元測試來測試某個請求的性能2 壓力測試 壓力測試無疑是測量系統(tǒng)性能中最常采用的方式,根據(jù)定義的性能目標(biāo)對系統(tǒng)進(jìn)行壓力測試,以確定系統(tǒng)是否滿足性能要求,同時也可以根據(jù)壓力測試的結(jié)果來分析系統(tǒng)的瓶頸

7、,進(jìn)而進(jìn)行對應(yīng)的調(diào)優(yōu),可用于做壓力測試的工具還是不少的,像loadrunner、Jmeter等。由于性能測試屬于測試團(tuán)隊的工作范疇,就不在這展開去講了。1.3、分析性能瓶頸根據(jù)測量系統(tǒng)性能的結(jié)果,多數(shù)是可以分析出系統(tǒng)性能瓶頸,同時還可以結(jié)合像jvm堆棧、jprofiler、系統(tǒng)日志等來進(jìn)行進(jìn)一步的確定,另外也可以根據(jù)性能調(diào)優(yōu)人員的經(jīng)驗,例如可以去了解開發(fā)人員是否采用了不適合的數(shù)據(jù)結(jié)構(gòu)等。2. JVM性能調(diào)優(yōu)工作中我們使用開源的J2EE容器較多,一般常用的就是tomcat及jboss,網(wǎng)上對tomcat和jboss進(jìn)行優(yōu)化的資料很多,本文僅僅對JVM參數(shù)進(jìn)行討論。2.1、JVM內(nèi)存組成及分配2.

8、1.1、JAVA內(nèi)存組成介紹:堆(Heap)和非堆(Non-heap)內(nèi)存按照官方的說法:“Java 虛擬機具有一個堆,堆是運行時數(shù)據(jù)區(qū)域,所有類實例和數(shù)組的內(nèi)存均從此處分配。堆是在 Java 虛擬機啟動時創(chuàng)建的?!薄霸贘VM中堆之外的內(nèi)存稱為非堆內(nèi)存(Non-heap memory)”??梢钥闯鯦VM主要管理兩種類型的內(nèi)存:堆和非堆。簡單來說堆就是Java代碼可及的內(nèi)存,是留給開發(fā)人員使用的;非堆就是JVM留給 自己用的,所以方法區(qū)、JVM內(nèi)部處理或優(yōu)化所需的內(nèi)存(如JIT編譯后的代碼緩存)、每個類結(jié)構(gòu)(如運行時常數(shù)池、字段和方法數(shù)據(jù))以及方法和構(gòu)造方法的代碼都在非堆內(nèi)存中。組成圖l 方法棧

9、&本地方法棧線程創(chuàng)建時產(chǎn)生,方法執(zhí)行時生成棧幀l 方法區(qū)存儲類的元數(shù)據(jù)信息 常量等l 堆Java代碼中所有的new操作l native Memory(C heap)Direct Bytebuffer JNI Compile GC2.1.2、堆內(nèi)存分配JVM初始分配的內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;JVM最大分配的內(nèi)存由-Xmx指 定,默認(rèn)是物理內(nèi)存的1/4。默認(rèn)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內(nèi)存大于70%時,JVM會減少堆直到 -Xms的最小限制。因此服務(wù)器一般設(shè)置-Xms、-Xmx相等以避免在每次GC 后調(diào)整堆的大小。對象的堆內(nèi)存

10、由稱為垃圾回收器的自動內(nèi)存管理系統(tǒng)回收。組成詳解Young Generation即圖中的Eden + From Space + To SpaceEden存放新生的對象Survivor Space有兩個,存放每次垃圾回收后存活的對象Old GenerationTenured Generation 即圖中的Old Space 主要存放應(yīng)用程序中生命周期長的存活對象2.1.3、非堆內(nèi)存分配JVM使用-XX:PermSize設(shè)置非堆內(nèi)存初始值,默認(rèn)是物理內(nèi)存的1/64;由XX:MaxPermSize設(shè)置最大非堆內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4。組成詳解Permanent Generation保存虛擬

11、機自己的靜態(tài)(refective)數(shù)據(jù)主要存放加載的Class類級別靜態(tài)對象如class本身,method,field等等permanent generation空間不足會引發(fā)full GC(詳見HotSpot VM GC種類)Code Cache用于編譯和保存本地代碼(native code)的內(nèi)存JVM內(nèi)部處理或優(yōu)化2.1.4、JVM內(nèi)存限制(最大值)JVM內(nèi)存的最大值跟操作系統(tǒng)有很大的關(guān)系。簡單的說就32位處理器雖然 可控內(nèi)存空間有4GB,但是具體的操作系統(tǒng)會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統(tǒng)下為1.5G-2G,Linux系統(tǒng) 下為2G-3G),而64b

12、it以上的處理器就不會有限制了。2.2、JVM參數(shù)詳解參數(shù)名稱含義默認(rèn)值 -Xms初始堆大小物理內(nèi)存的1/64(<1GB)默認(rèn)(MinHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存小于40%時,JVM就會增大堆直到-Xmx的最大限制.-Xmx最大堆大小物理內(nèi)存的1/4(<1GB)默認(rèn)(MaxHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存大于70%時,JVM會減少堆直到 -Xms的最小限制-Xmn年輕代大小(1.4or lator) 注意:此處的大小是(eden+ 2 survivor space).與jmap -heap中顯示的New gen是不同的。整個堆大小=年輕代大小

13、 + 年老代大小 + 持久代大小.增大年輕代后,將會減小年老代大小.此值對系統(tǒng)性能影響較大,Sun官方推薦配置為整個堆的3/8-XX:NewSize設(shè)置年輕代大小(for 1.3/1.4) -XX:MaxNewSize年輕代最大值(for 1.3/1.4) -XX:PermSize設(shè)置持久代(perm gen)初始值物理內(nèi)存的1/64 -XX:MaxPermSize設(shè)置持久代最大值物理內(nèi)存的1/4 -Xss每個線程的堆棧大小 JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K.更具應(yīng)用的線程所需內(nèi)存大小進(jìn)行 調(diào)整.在相同物理內(nèi)存下,減小這個值能生成更多的線程.但是操作系統(tǒng)對

14、一個進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗值在30005000左右一般小的應(yīng)用, 如果棧不是很深, 應(yīng)該是128k夠用的 大的應(yīng)用建議使用256k。這個選項對性能影響比較大,需要嚴(yán)格的測試。(校長)和threadstacksize選項解釋很類似,官方文檔似乎沒有解釋,在論壇中有這樣一句話:"”-Xss is translated in a VM flag named ThreadStackSize”一般設(shè)置這個值就可以了。-XX:ThreadStackSizeThread Stack Size (0 means use default stack size) Sparc: 5

15、12; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.-XX:NewRatio年輕代(包括Eden和兩個Survivor區(qū))與年老代的比值(除去持久代) -XX:NewRatio=4表示年輕代與年老代所占比值為1:4,年輕代占整個堆棧的1/5Xms=Xmx并且設(shè)置了Xmn的情況下,該參數(shù)不需要進(jìn)行設(shè)置。-XX:SurvivorRatioEden區(qū)與Survivor區(qū)的大小比值 設(shè)

16、置為8,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:8,一個Survivor區(qū)占整個年輕代的1/10-XX:LargePageSizeInBytes內(nèi)存頁的大小不可設(shè)置過大, 會影響Perm的大小 =128m-XX:+UseFastAccessorMethods原始類型的快速優(yōu)化 -XX:+DisableExplicitGC關(guān)閉System.gc() 這個參數(shù)需要嚴(yán)格的測試-XX:MaxTenuringThreshold垃圾最大年齡 如果設(shè)置為0的話,則年輕代對象不經(jīng)過Survivor區(qū),直接進(jìn)入年老代. 對于年老代比較多的應(yīng)用,可以提高效率.如果將此值設(shè)置為一個較大值,則年輕代對象會

17、在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對象再年輕代的存活 時間,增加在年輕代即被回收的概率該參數(shù)只有在串行GC時才有效.-XX:+AggressiveOpts加快編譯 -XX:+UseBiasedLocking鎖機制的性能改善 -Xnoclassgc禁用垃圾回收 -XX:SoftRefLRUPolicyMSPerMB每兆堆空閑空間中SoftReference的存活時間1ssoftly reachable objects will remain alive for some amount of time after the last time they were referenced.

18、The default value is one second of lifetime per free megabyte in the heap-XX:PretenureSizeThreshold對象超過多大是直接在舊生代分配0單位字節(jié) 新生代采用Parallel Scavenge GC時無效另一種直接在舊生代分配的情況是大的數(shù)組對象,且數(shù)組中無外部引用對象.-XX:TLABWasteTargetPercentTLAB占eden區(qū)的百分比1% -XX:+CollectGen0FirstFullGC時是否先YGCfalse 并行收集器相關(guān)參數(shù)-XX:+UseParallelGCFull GC采

19、用parallel MSC(此項待驗證) 選擇垃圾收集器為并行收集器.此配置僅對年輕代有效.即上述配置下,年輕代使用并發(fā)收集,而年老代仍舊使用串行收集.(此項待驗證)-XX:+UseParNewGC設(shè)置年輕代為并行收集 可與CMS收集同時使用JDK5.0以上,JVM會根據(jù)系統(tǒng)配置自行設(shè)置,所以無需再設(shè)置此值-XX:ParallelGCThreads并行收集器的線程數(shù) 此值最好配置與處理器數(shù)目相等 同樣適用于CMS-XX:+UseParallelOldGC年老代垃圾收集方式為并行收集(Parallel Compacting) 這個是JAVA 6出現(xiàn)的參數(shù)選項-XX:MaxGCPauseMilli

20、s每次年輕代垃圾回收的最長時間(最大暫停時間) 如果無法滿足此時間,JVM會自動調(diào)整年輕代大小,以滿足此值.-XX:+UseAdaptiveSizePolicy自動選擇年輕代區(qū)大小和相應(yīng)的Survivor區(qū)比例 設(shè)置此選項后,并行收集器會自動選擇年輕代區(qū)大小和相應(yīng)的Survivor區(qū)比例,以達(dá)到目標(biāo)系統(tǒng)規(guī)定的最低相應(yīng)時間或者收集頻率等,此值建議使用并行收集器時,一直打開.-XX:GCTimeRatio設(shè)置垃圾回收時間占程序運行時間的百分比 公式為1/(1+n)-XX:+ScavengeBeforeFullGCFull GC前調(diào)用YGCtrueDo young generation GC pri

21、or to a full GC. (Introduced in 1.4.1.)CMS相關(guān)參數(shù)-XX:+UseConcMarkSweepGC使用CMS內(nèi)存收集 測試中配置這個以后,-XX:NewRatio=4的配置失效了,原因不明.所以,此時年輕代大小最好用-Xmn設(shè)置.?-XX:+AggressiveHeap 試圖是使用大量的物理內(nèi)存長時間大內(nèi)存使用的優(yōu)化,能檢查計算資源(內(nèi)存, 處理器數(shù)量)至少需要256MB內(nèi)存大量的CPU內(nèi)存, (在1.4.1在4CPU的機器上已經(jīng)顯示有提升)-XX:CMSFullGCsBeforeCompaction多少次后進(jìn)行內(nèi)存壓縮 由于并發(fā)收集器不對內(nèi)存空間進(jìn)行壓

22、縮,整理,所以運行一段時間以后會產(chǎn)生"碎片",使得運行效率降低.此值設(shè)置運行多少次GC以后對內(nèi)存空間進(jìn)行壓縮,整理.-XX:+CMSParallelRemarkEnabled降低標(biāo)記停頓 -XX+UseCMSCompactAtFullCollection在FULL GC的時候, 對年老代的壓縮 CMS是不會移動內(nèi)存的, 因此, 這個非常容易產(chǎn)生碎片, 導(dǎo)致內(nèi)存不夠用, 因此, 內(nèi)存的壓縮這個時候就會被啟用。 增加這個參數(shù)是個好習(xí)慣??赡軙绊懶阅?但是可以消除碎片-XX:+UseCMSInitiatingOccupancyOnly使用手動定義初始化定義開始CMS收集 禁止h

23、ostspot自行觸發(fā)CMS GC-XX:CMSInitiatingOccupancyFraction=70使用cms作為垃圾回收使用70后開始CMS收集92為了保證不出現(xiàn)promotion failed(見下面介紹)錯誤,該值的設(shè)置需要滿足以下公式CMSInitiatingOccupancyFraction計算公式-XX:CMSInitiatingPermOccupancyFraction設(shè)置Perm Gen使用到達(dá)多少比率時觸發(fā)92 -XX:+CMSIncrementalMode設(shè)置為增量模式 用于單CPU情況-XX:+CMSClassUnloadingEnabled 輔助信息-XX:+P

24、rintGC 輸出形式:GC 118250K->113543K(130112K), 0.0094143 secsFull GC 121376K->10414K(130112K), 0.0650971 secs-XX:+PrintGCDetails 輸出形式:GC DefNew: 8614K->781K(9088K), 0.0123035 secs 118250K->113543K(130112K), 0.0124633 secsGC DefNew: 8614K->8614K(9088K), 0.0000665 secsTenured: 112761K->10

25、414K(121024K), 0.0433488 secs 121376K->10414K(130112K), 0.0436268 secs-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps 可與-XX:+PrintGC -XX:+PrintGCDetails混合使用輸出形式:11.851: GC 98328K->93620K(130112K), 0.0082960 secs-XX:+PrintGCApplicationStoppedTime打印垃圾回收期間程序暫停的時間.可與上面混合使用 輸出形式:Total time fo

26、r which application threads were stopped: 0.0468229 seconds-XX:+PrintGCApplicationConcurrentTime打印每次垃圾回收前,程序未中斷的執(zhí)行時間.可與上面混合使用 輸出形式:Application time: 0.5291524 seconds-XX:+PrintHeapAtGC打印GC前后的詳細(xì)堆棧信息 -Xloggc:filename把相關(guān)日志信息記錄到文件以便分析.與上面幾個配合使用 -XX:+PrintClassHistogramgarbage collects before printing th

27、e histogram. -XX:+PrintTLAB查看TLAB空間的使用情況 XX:+PrintTenuringDistribution查看每次minor GC后新的存活周期的閾值 Desired survivor size 1048576 bytes, new threshold 7 (max 15)new threshold 7即標(biāo)識新的存活周期的閾值為7。2.3、參數(shù)配置示例示例參數(shù)僅供參考:-server-Xms6000M-Xmx6000M-Xmn500M-XX:PermSize=500M-XX:MaxPermSize=500M-XX:SurvivorRatio=65536-XX:

28、MaxTenuringThreshold=0-Xnoclassgc-XX:+DisableExplicitGC-XX:+UseParNewGC-XX:+UseConcMarkSweepGC-XX:+UseCMSCompactAtFullCollection-XX:CMSFullGCsBeforeCompaction=0-XX:+CMSClassUnloadingEnabled-XX:-CMSParallelRemarkEnabled-XX:CMSInitiatingOccupancyFraction=90-XX:SoftRefLRUPolicyMSPerMB=0-XX:+PrintClassH

29、istogram-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-XX:+PrintHeapAtGC說明: -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0就是去掉了救助空間; -Xnoclassgc禁用類垃圾回收,性能會高一點; -XX:+DisableExplicitGC禁止System.gc(),免得程序員誤調(diào)用gc方法影響性能; -XX:+UseParNewGC,對年輕代采用多線程并行回收,這樣收得快; 帶CMS參數(shù)的都是和并發(fā)回收相關(guān)的,不明白的可以查看上面的參數(shù)詳解或上網(wǎng)搜索。 CMSInitia

30、tingOccupancyFraction,這個參數(shù)設(shè)置有很大技巧,基本上滿足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不會出現(xiàn)promotion failed。在我的應(yīng)用中Xmx是6000,Xmn是500,那么Xmx-Xmn是5500兆,也就是年老代有5500兆,CMSInitiatingOccupancyFraction=90說明年老代到90%滿的時候開始執(zhí)行對年老代的并發(fā)垃圾回收(CMS),這時還剩10%的空間是5500*10%=550兆,所以即使Xmn(也就是年輕代共500兆)里所有對象都搬到年老代里,550兆

31、的空間也足夠了,所以只要滿足上面的公式,就不會出現(xiàn)垃圾回收時的promotion failed;3. J2EE應(yīng)用監(jiān)控J2EE應(yīng)用在運行過程中,我們可以通過多種監(jiān)控手段來對應(yīng)用進(jìn)行監(jiān)控,監(jiān)控的內(nèi)容包括數(shù)據(jù)庫資源的訪問,CPU占用,內(nèi)存占用,運行狀態(tài)。通過對容器及應(yīng)用的監(jiān)控,找出性能瓶頸,提高應(yīng)用的性能。3.1、數(shù)據(jù)庫連接池監(jiān)控(Druid)應(yīng)用系統(tǒng)性能出現(xiàn)問題,首先考慮進(jìn)行排查的就是數(shù)據(jù)調(diào)用的性能問題,是否存在性能較差的查詢,是否表結(jié)構(gòu)設(shè)計需要進(jìn)行優(yōu)化,是否加載了過多的數(shù)據(jù),占用了I/O及帶寬。公司JAVA平臺采用了阿里巴巴的開源數(shù)據(jù)庫連接池,能夠?qū)?shù)據(jù)庫的訪問及操作提供實時的監(jiān)控及分析。3.

32、1.1、Druid連接池配置v 下載Druid1、 下載jar包maven central repository:/maven2/com/alibaba/druid/alibaba maven repository:2、 或配置Maven依賴,在Maven配置文件pom.xml中添加依賴v 開啟Druid內(nèi)置監(jiān)控頁面Druid內(nèi)置提供了一個StatViewServlet用于展示Druid的統(tǒng)計信息。這個StatViewServlet的用途包括:l 提供監(jiān)控信息展示的html頁面l 提供監(jiān)控信息的JSON API注意:使用StatViewServlet,

33、建議使用druid 0.2.6以上版本。1、 配置web.xml根據(jù)配置中的url-pattern來訪問內(nèi)置監(jiān)控頁面,如果是上面的配置,內(nèi)置監(jiān)控頁面的首頁是/druid/index.html例如:http:/localhost:8080/druid/index.html 2、 配置allow和denyStatViewSerlvet展示出來的監(jiān)控信息比較敏感,是系統(tǒng)運行的內(nèi)部情況,如果你需要做訪問控制,可以配置allow和deny這兩個參數(shù)。比如:判斷規(guī)則v deny優(yōu)先于allow,如果在deny列表中,就算在allow列表中,也會被拒絕。v 如果allow沒有配置或者為空,則允許所有訪問。3

34、.1.2、Druid連接池監(jiān)控若要開啟更多監(jiān)控,請參見Druid官方文檔:Druid監(jiān)控界面截圖:首頁數(shù)據(jù)源SQL監(jiān)控3.2、容器管理及監(jiān)控(psi-probe)PSI Probe 是一個 Lambda Probe 的后續(xù)版本,主要是為了替換 Tomcat 自帶的管理器,可方便的管理和監(jiān)控 Tomcat及Jboss 實例(Jboss不支持7以上版本)。3.2.1、Tomcat下安裝部署1. 下載地址2. 安裝1 解壓,將probe.war放進(jìn)webapps目錄。2 修改CATALINA_HOME/conf/tomcat-users.xml增加probe角色及人員,以Tomcat7為例:3 其他

35、配置如果要查看System Information,Linux版本:catalina.sh中加入如下語句:JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"windows版本:catalina.bat中加入:SET JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote4 訪問監(jiān)控應(yīng)用例如:http:/localhost:8080/probe3. 權(quán)限控制probe有 probeuser、poweruser、poweruserplus、manager(針對不同tomca

36、t版本)等角色,對應(yīng)可操作的功能如下表:特別注意一點:表格里面的X表示擁有權(quán)限,也就是說,manager的權(quán)限是最大的,什么都能操作。在實際的生產(chǎn)運維過程中,運維人員可以創(chuàng)建具有manager操作權(quán)限的賬號,用于應(yīng)用的部署及服務(wù)的維護(hù)相關(guān)操作。而為了方便項目組開發(fā)人員對本項目的維護(hù)和操作,可以開放權(quán)限較小的賬號,便于跟蹤應(yīng)用的運行狀態(tài),下載分析錯誤日志及操作日志。Features by RoleprobeuserpoweruserpoweruserplusmanagerContext: listXXXXContext: statusXXXXContext: view servletsXXXXC

37、ontext: view servlet mappingsXXXXContext: view filtersXXXXContext: view filter mappingsXXXXContext: list attributesXXXXContext: remove attributesXXXContext: startXXXContext: stopXXXContext: view web.xmlXXXContext: view context.xmlXContext: deployXContext: undeployXSession: listXXXXSession: list attr

38、ibutesXXXXSession: search attributesXXXXSession: remove attributesXXXSession: view last-accessed IPXXXXSession: expire singleXXXSession: expire multipleXXXJSP: listXXXJSP: view sourceXXXJSP: view servlet sourceXXXJSP: compile singleXXXJSP: compile multipleXXXJSP: compile all on deploymentXJSP: disca

39、rd all compiledXData Source: listXXXXData Source: group by JDBC URLXXXXData Source: statusXXXXData Source: resetXXXData Source: testXXData Source: view query historyXXData Source: execute SQLXXLog: listXXXXLog: tail in real-timeXXXXLog: downloadXXXXLog: change levelXThread: listXXXXThread: list pool

40、sXXXXThread: view execution stackXXXThread: killXConnector: statusXXXXConnector: real-time usage chartsXXXXCluster: statusXXXXCluster: real-time traffic chartsXXXXJVM: real-time memory usage chartsXXXXJVM: statusXXXXJVM: advise GCXJava Service Wrapper: statusXXXXJava Service Wrapper: restart JVMXSys

41、tem: overviewXXXXSystem: propertiesXXXXSystem: OS detailsXQuick Check: executeX3.2.2、probe監(jiān)控界面應(yīng)用程序(可以啟動/停止/卸載應(yīng)用)應(yīng)用發(fā)布(發(fā)布應(yīng)用)日志(可以在線查看,下載日志)日志(動態(tài)調(diào)整日志級別)線程監(jiān)控系統(tǒng)信息運行監(jiān)控運行監(jiān)控3.3、JAVA虛擬機監(jiān)控(Visual VM)VisualVM 提供在 Java 虛擬機 (Java Virutal Machine, JVM) 上運行的Java 應(yīng)用程序的詳細(xì)信息。在 VisualVM 的圖形用戶界面中,您可以方便、快 捷地查看多個Java 應(yīng)用程

42、序的相關(guān)信息。 (摘自官方) 簡單說來,VisualVM 是一種集成了多個JDK 命令行工具的可視化工具,它能為您提供強大的分析能力。所有這些都是免費的!它囊括的命令行工具包括 jstat, JConsole, jstack, jmap 和 jinfo,這些工具與JDK 的標(biāo)準(zhǔn)版本是一致的。 可以使用VisualVM 生成和分析海量數(shù)據(jù)、跟蹤內(nèi)存泄漏、監(jiān)控垃圾回收器、執(zhí)行內(nèi)存和CPU 分析,同時它還支持在MBeans 上進(jìn)行瀏覽和操作。盡管VisualVM 自身要在JDK6 這個版本上運行,但是JDK1.4 以上版本的程序它都能監(jiān)控。 3.3.1、VisualVM安裝VisualVM 的一個最

43、大好處就是,它已經(jīng)在你的JDK bin目錄里了,只要你使 用的是JDK1.6 Update7 之后的版本。點擊一下jvisualvm.exe 圖標(biāo)它就可以運行了。 這里是VisualVM 的官方網(wǎng)站:,資料很全,同時提供VisualVM 最近版本下載。3.3.2、VisualVM簡介Visual VM 啟動成功!可以看到Visual VM 的界面了。通過Visual VM 可以看到本機運行中的所有Java 應(yīng)用。你會發(fā)現(xiàn)根本不需要在VisualVM 里為Java應(yīng)用程序注冊,它們就會自動顯示出來。甚至還可以在導(dǎo)航欄里查看到遠(yuǎn)程的Java應(yīng)用。導(dǎo)航欄即為Applications,其中分為Loca

44、l(本地Java 應(yīng)用)和Remote(遠(yuǎn)程的Java 應(yīng)用)。 3.3.3、安裝插件Visual VM 有很多好用的插件;而且Sun 為了推廣Visual VM,還舉辦的Visual VM 插件開發(fā)大賽。如何安裝插件呢?步驟如下:1 點擊 工具 -> 插件2 推薦安裝全部插件(本演示已經(jīng)安裝,所以僅顯示已安裝,可用插件為空)3.3.4、監(jiān)控本地JAVA應(yīng)用Visual VM 本身就是一個Java 應(yīng)用,所以打開Visual VM看到的第一個可監(jiān)控應(yīng)用就是Visual VM 本身;可以用它熱熱身,小試下牛刀。在Visual VM可視化界面中可以監(jiān)控到Visual VM 本身的內(nèi)存使用情況

45、、線程情況、Jvm 啟動參數(shù)、cpu 消耗情況、垃圾回收情況等很多參數(shù)。當(dāng)然如果在本地啟一個Tomcat一樣可以看到這些參數(shù),可以方便我們在本地對JVM 進(jìn)行調(diào)優(yōu)。3.3.5、監(jiān)控遠(yuǎn)程JAVA應(yīng)用監(jiān)視遠(yuǎn)程Java 應(yīng)用稍微復(fù)雜些。Visual VM是通過JMX 來和遠(yuǎn)程Java 應(yīng)用聯(lián)系的。 JMX:Java Management Extensions,即Java 管理擴(kuò)展,是一個為應(yīng)用程序、設(shè)備、系統(tǒng)等植入管理功能的框架。JMX 可以跨越一系列異構(gòu)操作系統(tǒng)平臺、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,靈活的開發(fā)無縫集成的系統(tǒng)、網(wǎng)絡(luò)和服務(wù)管理應(yīng)用。 下面以4 上的tomcat 7為例,敘述下監(jiān)視遠(yuǎn)程Java 應(yīng)用的步驟 如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論