自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

運(yùn)維 服務(wù)器運(yùn)維
Java本身已不僅僅只是一門面向?qū)ο蟮木幊陶Z言,而是由一系列計(jì)算機(jī)軟件和規(guī)范形成的技術(shù)體系,這個(gè)技術(shù)體系提供了完整的跨平臺(tái)開發(fā)與部署的支持,實(shí)現(xiàn)“一次編寫、到處運(yùn)行”的目的。Java已經(jīng)廣泛的應(yīng)用于嵌入式、移動(dòng)終端、企業(yè)服務(wù)器、大型機(jī)等各種場合。

 一、Java平臺(tái)體系及應(yīng)用場景

  從1995年Sun Microsystems公司正式推出Java,到2006年時(shí)Sun公司將其開源,迄今為止已經(jīng)有了20年的歷史。Java本身已不僅僅只是一門面向?qū)ο蟮木幊陶Z言,而是由一系列計(jì)算機(jī)軟件和規(guī)范形成的技術(shù)體系,這個(gè)技術(shù)體系提供了完整的跨平臺(tái)開發(fā)與部署的支持,實(shí)現(xiàn)“一次編寫、到處運(yùn)行”的目的。Java已經(jīng)廣泛的應(yīng)用于嵌入式、移動(dòng)終端、企業(yè)服務(wù)器、大型機(jī)等各種場合。

  Sun官方所定義的Java技術(shù)體系包括如下幾個(gè)組成部分:

  * Java程序設(shè)計(jì)語言

  * 各種硬件平臺(tái)上的Java虛擬機(jī)

  * Class文件格式

  * 來自商業(yè)機(jī)構(gòu)和開源社區(qū)的第三方Java類庫

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  圖:Java技術(shù)體系組件圖

  Java Virtual Machine(JVM)是Java體系的基礎(chǔ),負(fù)責(zé)解釋、編譯執(zhí)行.class文件形式的字節(jié)碼,同時(shí)負(fù)責(zé)內(nèi)存管理、熱點(diǎn)代碼檢測和運(yùn)行時(shí)編譯優(yōu)化。正是由于有了虛擬機(jī)的基礎(chǔ),才使Java實(shí)現(xiàn)了“一次編寫、到處運(yùn)行”。Java這20年的發(fā)展,其實(shí)更是虛擬機(jī)的發(fā)展過程。期間經(jīng)歷了Sun、BEA公司各自開發(fā)的虛擬機(jī),2009年之后,ORACLE將這兩家公司收購,并將這些虛擬機(jī)取長補(bǔ)短、合二為一。目前還是開源的虛擬機(jī)OpenJDK,可供愛好者學(xué)習(xí)研究用。

  JRE部分是支持Java程序運(yùn)行的標(biāo)準(zhǔn)環(huán)境。JDK是JRE的超集,包含JRE的一切,再加上工具如編譯器、調(diào)試器等。

  二、Java性能監(jiān)控需求

  對于一個(gè)企業(yè)的應(yīng)用系統(tǒng),大多數(shù)情況下,肯定是由多種編程語言開發(fā)的各種系統(tǒng)的集成。我們都非常關(guān)心系統(tǒng)的可用性、及時(shí)響應(yīng)性、資源的消耗,比如CPU、內(nèi)存、各種I/O、網(wǎng)路帶寬等消耗情況。對于這些問題的性能瓶頸點(diǎn),我們一般可以歸納為外部服務(wù)(如第三方API)、資源讀寫、代碼異常。如果在發(fā)生這些問題時(shí),能夠及時(shí)完整的抓拍記錄保留下來,那么對于我們解決問題將會(huì)提供充足的證據(jù),解決問題會(huì)變的非常容易。

  對于Java應(yīng)用系統(tǒng)來說,JVM自身提供了相應(yīng)的性能監(jiān)控手段和工具,經(jīng)常在出現(xiàn)問題后,比如內(nèi)存泄漏或溢出時(shí),我們會(huì)通過jmap命令導(dǎo)出堆的轉(zhuǎn)儲(chǔ)快照,利用相應(yīng)的命令jhat或其他相應(yīng)的第三方內(nèi)存分析工具來分析對象的占用情況。

  響應(yīng)緩慢時(shí),我們可能會(huì)用jstat監(jiān)視命令、或jdk的可視化工具jconsole、visualvm來分析JVM的垃圾回收類型、回收頻率,來推測是否是垃圾回收導(dǎo)致的。有可能我們還要接著分析線程轉(zhuǎn)儲(chǔ)快照,通過jstack取出線程的??煺眨瑏矸治鍪欠裼姓嫠梨i、死循環(huán)導(dǎo)致的相應(yīng)緩慢、資源負(fù)載高等情況。

  當(dāng)有問題出現(xiàn)時(shí),許多開發(fā)人員可能都是比較盲目的用這些工具來試探性定位問題,而大多數(shù)情況下,這種試探會(huì)無功而返。因?yàn)檫@些分析工具主要是側(cè)重Java單方面的分析,比如該系統(tǒng)調(diào)用第三方API,如果第三方API有問題,是無法監(jiān)控到的。還有像文件、DB資源的訪問也是是無法監(jiān)控到的。

  而且,只有對Java虛擬機(jī)機(jī)制較為熟悉的高級開發(fā)人員才能比較好的運(yùn)用、理解這些工具,對于大多數(shù)普通Java開發(fā)人員來說,這些問題只會(huì)令他們束手無策。

  像外部服務(wù)(如第三方API)、資源讀寫、代碼異常這些瓶頸點(diǎn),需要通過代碼級別的監(jiān)控才能直接、快速、有效的找到癥結(jié)所在。調(diào)用第三方API的耗時(shí)、資源訪問的耗時(shí)、代碼拋出的非預(yù)知異常,這些常見問題代碼監(jiān)控完全能夠監(jiān)控到,并能夠?qū)崟r(shí)抓拍記錄,一旦有問題可以快速還原事故問題現(xiàn)場。通過代碼級別監(jiān)控發(fā)現(xiàn)問題后,也可以在輔助利用虛擬機(jī)內(nèi)置監(jiān)控工具進(jìn)行進(jìn)一步的定位。

  三、透視寶Java監(jiān)控實(shí)現(xiàn)原理

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  圖:Java的執(zhí)行模型

  在Java的執(zhí)行體系中,由.Java源碼文件編譯后的.class字節(jié)碼文件,可以理解為中間語言。

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  圖:透視寶Java監(jiān)控實(shí)現(xiàn)原理

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  圖:透視寶Java監(jiān)控實(shí)例運(yùn)行圖

  1、字節(jié)碼load至JVM時(shí)發(fā)生了什么

  * 回調(diào)函數(shù)注冊完畢后,凡是當(dāng)有任何的class文件即將被類加載器加載前,都

  會(huì)執(zhí)行回調(diào)函數(shù)transform,在此方法內(nèi)實(shí)現(xiàn)的類改變操作。

  * 實(shí)現(xiàn)的transform方法中,我們使用的是ASM字節(jié)碼操作框架,ASM從二進(jìn)制

  形式的類文件中讀取、分析類的信息,然后修改改變類的行為。

  * transform方法的基本代碼形式如下:

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  2、如何實(shí)際改變類行為

  * 在依賴于ASM基礎(chǔ)之上,我們抽象出這樣的業(yè)務(wù)模型

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  * 常用的攔截探針

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  * 常用的運(yùn)行時(shí)攔截處理器

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  * 支持的攔截定義過濾器規(guī)則

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  * 該業(yè)務(wù)模型對應(yīng)的行為

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  定義攔截描述時(shí),指定過濾攔截哪些類、哪些方法,然后,在這些行為的點(diǎn)上,可以埋入探針、處理器。重寫visitCode、visitInsn、visitMaxs分別實(shí)現(xiàn)方法進(jìn)入、返回、異常的相關(guān)操作改寫。

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  四、透視寶Java監(jiān)控部署流程

  1、登錄云智慧透視寶官網(wǎng):https://www.toushibao.com/ ,點(diǎn)擊頁面右上角導(dǎo)航的“免費(fèi)試用”,正確填寫免費(fèi)試用的申請信息后會(huì)彈出下面的對話框,同時(shí)激活郵件會(huì)自動(dòng)發(fā)送到你的郵箱中,按照流程注冊帳號(hào)即可。

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  2、注冊成功后,登錄透視寶,點(diǎn)擊配置-應(yīng)用,在配置頁面中下載安裝Smart Agent。安裝成功后,Smart Agent會(huì)根據(jù)系統(tǒng)配置自動(dòng)獲取主機(jī)信息,大致兩分鐘后,您就可以在“主機(jī)→服務(wù)器”模塊中查看該服務(wù)器的CPU、內(nèi)存、網(wǎng)卡、磁盤及進(jìn)程等性能數(shù)據(jù)。

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  3、如果要監(jiān)控應(yīng)用運(yùn)行時(shí)代碼、主機(jī)中服務(wù)和數(shù)據(jù)庫性能數(shù)據(jù),您需要進(jìn)一步安裝和配置Smart Agent提供的各種插件,這是因?yàn)镾mart Agent實(shí)現(xiàn)了一種開放式的插件式結(jié)構(gòu),對每個(gè)運(yùn)行時(shí)代碼、服務(wù)和數(shù)據(jù)庫的監(jiān)控都是通過相應(yīng)的插件來實(shí)現(xiàn)的。

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  Smart Agent在安裝完成后,加載過程中自動(dòng)發(fā)現(xiàn)你的應(yīng)用組件,如果沒有自動(dòng)監(jiān)測到Java環(huán)境,也可以手動(dòng)添加Java Agent。如上圖所示,點(diǎn)擊“管理”入口,進(jìn)入“插件管理”,點(diǎn)擊頁面下部的“添加服務(wù)”,選擇JavaAgent后,點(diǎn)擊“創(chuàng)建”。

  創(chuàng)建完畢后,點(diǎn)擊“ON”。(該ON操作只是初始化用戶的信息,以便以后采集到的信息能夠正確的回傳給該用戶。)

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  以上都操作完后,在{smartagent的安裝路徑}/plugins,就會(huì)看到如下形式的

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  在到{smartagent的安裝路徑}/plugins/JavaAgent_1442476463X1002x0/conf文件夾下,查看app.conf文件,看看該文件內(nèi)的HostKey的值是否是如下類似的加密形式

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  以上情況,表明JavaAgent已經(jīng)下載啟動(dòng)初始化成功。

  4、安裝JavaAgent至各種應(yīng)用服務(wù)器上,如tomcat\jboss\weblogic。(該操作參考官網(wǎng)https://www.toushibao.com/即可)

  5、只要啟動(dòng)相應(yīng)服務(wù)器,然后訪問您的應(yīng)用url即可,該url對用的代碼執(zhí)行情況即可呈現(xiàn)給您,一旦出現(xiàn)緩慢問題也一目了然。如下圖示意

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  五、透視寶Java代碼性能監(jiān)控特點(diǎn)

  在功能方面,透視寶無論是在Java,還是其他如.NET、PHP等主流語言的監(jiān)控上,都包括:查看執(zhí)行最慢的10個(gè)元素,包括元素執(zhí)行次數(shù)、持續(xù)時(shí)長和占用時(shí)長百分比;查看HTTP請求參數(shù),包括請求的響應(yīng)狀態(tài)、鏈接頁面、具體的請求參數(shù)及返回結(jié)果;查看代碼執(zhí)行堆棧的詳細(xì)樹狀信息,包括每個(gè)方法的計(jì)算時(shí)間、總耗時(shí)和被調(diào)用的次數(shù),您能直接看到特殊標(biāo)識(shí)的最慢方法;查看涉及SQL語句的總耗時(shí)排序,包括SQL執(zhí)行總耗時(shí)、執(zhí)行次數(shù)和具體的查詢語句;第三方API調(diào)用。

云智慧透視寶Java代碼性能監(jiān)控實(shí)現(xiàn)原理

  端到端性能監(jiān)控示意圖

  在性能方面,云智慧透視寶的JavaAgent代碼監(jiān)控探針包,對用戶的性能影響到底有多大?從安裝包本身來看,它非常小,僅為1.5M。在不安裝Java探針包和安裝Java探針包,分別運(yùn)行應(yīng)用。經(jīng)過測試對比,CPU使用率差值、內(nèi)存消耗差值、TPS差值均在5%以內(nèi)。

責(zé)任編輯:路途 來源: 云智慧
相關(guān)推薦

2015-11-17 18:06:22

云智慧PHP應(yīng)用性能

2015-12-11 11:49:19

java

2015-05-19 21:25:13

云智慧透視寶應(yīng)用性能管理

2015-05-07 13:11:22

透視寶云智慧

2014-12-29 10:33:00

2015-05-07 14:06:31

云智慧監(jiān)控寶IaaS平臺(tái)

2015-04-30 13:21:29

IaaS平臺(tái)性能云智慧監(jiān)控寶

2015-12-11 11:39:15

.net代碼

2015-12-17 17:59:19

云智慧

2015-03-21 06:11:48

透視寶云智慧

2015-05-11 13:20:18

云智慧透視寶

2015-09-15 15:41:09

監(jiān)控寶Docker

2014-09-16 13:33:50

大數(shù)據(jù)

2014-06-17 15:33:47

監(jiān)控寶

2015-09-21 15:39:16

云智慧

2015-12-11 14:02:02

php應(yīng)用

2016-05-11 13:54:28

云計(jì)算監(jiān)控

2015-05-22 13:33:23

云智慧“創(chuàng)新中國”春季峰會(huì)

2015-10-21 16:31:40

云智慧

2025-02-25 12:00:00

Java線程開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)