性能測試體系-監(jiān)控

?摘自:https://help.aliyun.com/document_detail/29341.html?spm=5176.doc29330.6.612.e9kTtv

1 引言

1.1 編寫目的

本文檔主要目標(biāo)是規(guī)范使用性能測試過程中需監(jiān)控的各項技術(shù)指標(biāo)凡纳,描述各指標(biāo)項的具體含義,并給出相應(yīng)的監(jiān)控工具與方法說明哗脖。本文檔將作為測試監(jiān)控的指導(dǎo)性規(guī)范榛臼,用以選取監(jiān)控關(guān)注指標(biāo)勇蝙,使用監(jiān)控工具。

1.2 適用對象和范圍

監(jiān)控指標(biāo)及監(jiān)控工具適用于使用性能測試進(jìn)行性能測試項目技術(shù)質(zhì)量評價依據(jù)搂誉。 預(yù)期讀者為測試管理人員、測試實施人員、技術(shù)支持人員帘营、項目質(zhì)量管理人員票渠、項目管理人員等系統(tǒng)技術(shù)質(zhì)量相關(guān)人員。

1.3 參考文檔

相關(guān)的指標(biāo)定義及解釋可以參照:性能測試指標(biāo)芬迄,本章可能會增加及減少相關(guān)指標(biāo)的描述问顷,并不與性能測試指標(biāo)中相關(guān)指標(biāo)沖突。

2 業(yè)務(wù)指標(biāo)監(jiān)控

2.1 監(jiān)控指標(biāo)

業(yè)務(wù)指標(biāo)主要包括并發(fā)用戶數(shù)、響應(yīng)時間杜窄、處理能力肠骆,成功率這四個指標(biāo),目前大部分壓測工具都能將這些指標(biāo)放在壓測工具里面塞耕。

2.2 監(jiān)控工具

2.2.1 性能測試

性能測試分布式壓測工具蚀腿,將相關(guān)業(yè)務(wù)指標(biāo)集成在平臺上。

2.2.2 后臺日志

通過后臺日志log,采用分析工具也可進(jìn)行分析得出TPS扫外,響應(yīng)時間等莉钙。

3 操作系統(tǒng)指標(biāo)監(jiān)控

3.1 Linux

3.1.1 監(jiān)控指標(biāo)說明

指標(biāo)類型指標(biāo)名稱指標(biāo)描述

CPUCPU utilizationCPU 的使用時間百分比

System mode CPU utilization在系統(tǒng)模式下使用 CPU 的時間百分比

User mode CPU utilization在用戶模式下使用 CPU 的時間百分比

MemoryPage-in rate每秒鐘讀入到物理內(nèi)存中的頁數(shù)

Page-out rate每秒鐘寫入頁面文件和從物理內(nèi)存中刪除的頁數(shù)

Paging rate每秒鐘讀入物理內(nèi)存或?qū)懭腠撁嫖募捻摂?shù)

DiskDisk rate磁盤傳輸速率

3.1.2 監(jiān)控工具

3.1.2.1 性能測試

性能測試壓測工具監(jiān)控操作系統(tǒng)指標(biāo)主要有:

CPU%:所有CPU資源利用率

網(wǎng)絡(luò)流量:每秒入網(wǎng)出網(wǎng)多少Kb

磁盤:每秒讀寫多少Kb

3.1.2.2 命令

Linux提供豐富的命令進(jìn)行監(jiān)控,針對CPU筛谚、Memory磁玉、I/O等有一些列命令及參數(shù)進(jìn)行監(jiān)控。具體如下:

top : 整體查看資源情況驾讲。

sar :CPU資源消耗

vmstat:內(nèi)存相關(guān)消耗

iostat: 磁盤相關(guān)消耗

………

具體用法和參數(shù)写半,可以參照聯(lián)機(jī)幫助(man top等)。

3.1.2.3 Shell

可以將以上命令通過shell來包裝裕循,每隔多少秒監(jiān)控一次椎扬,總共監(jiān)控多少次,將監(jiān)控結(jié)果寫到文件里面沐兵。

例如:下面shell就是將CPU Load每隔3秒寫到文件里面别垮。

while true ; do uptime | awk -F' average: ' '{print $2}' ;sleep 3;done >> `hostname`_`date +%Y%m%d_%H%M`.uptime

3.1.2.4 nmon

Nmon安裝 將 nmonXXX.tar.gz 文件復(fù)制到計算機(jī)。如果使用 FTP扎谎,請記住使用二進(jìn)制模式碳想。

解壓該文件,運(yùn)行 gzip -d nmonXXX.tar.gz

提取該文件毁靶,運(yùn)行tar xvf nmonXXX.tar

Nmon實時監(jiān)控 登陸要監(jiān)控的系統(tǒng)胧奔,進(jìn)入nmon安裝目錄中

輸入命令nmon,運(yùn)行 nmon(如root用戶可能需要輸入./nmon).顯示的起始屏幕及CPU等信息预吆。如圖:

依次按c龙填,m,d即可顯示CPU拐叉,內(nèi)存岩遗,磁盤等信息。如圖:

Nmon運(yùn)行時的鍵盤命令

命令說明

c提供關(guān)于物理CPU使用的詳細(xì)信息

m提供內(nèi)存使用的詳細(xì)信息:系統(tǒng)(內(nèi)核)和進(jìn)程凤瘦,活動虛擬內(nèi)存

d提供關(guān)于磁盤宿礁,磁盤類型大小,可用空間蔬芥,卷組梆靖,適配器等更詳細(xì)的信息

t當(dāng)前進(jìn)程詳細(xì)情

PPaging space 使用情況

k顯示內(nèi)核信息

+Nmon 結(jié)果保存為文件

Nmon 結(jié)果保存為文件 nmon -f -s 60 -c 30(每60s收集一次數(shù)據(jù)控汉,共收集30次) nmon.sh 賦執(zhí)行權(quán)限:chmod +x nmon.sh 執(zhí)行nmon.sh 即可運(yùn)行.

3.2 Windows

3.2.1 監(jiān)控指標(biāo)說明

提供的監(jiān)控指標(biāo)比較豐富,包括CPU返吻、內(nèi)存姑子、網(wǎng)絡(luò)、磁盤以及每個進(jìn)程的資源测僵。

3.2.2 監(jiān)控工具

3.2.2.1 性能測試

同3.1.2.1 性能測試

3.2.2.2 資源管理器

Windows操作系統(tǒng)自帶的windows資源管理器街佑,在任務(wù)欄里面點(diǎn)擊右鍵,啟動任務(wù)管理器:

點(diǎn)擊性能面板恨课,再點(diǎn)擊資源監(jiān)視器:

3.2.2.3 性能監(jiān)視器

Windows有自帶的性能監(jiān)視器舆乔,可以指定相關(guān)的監(jiān)控指標(biāo)進(jìn)行監(jiān)控,將結(jié)果保存為文件剂公,從windows控制面板->管理工具->性能監(jiān)視器->新建數(shù)據(jù)搜集器希俩,添加你感興趣的指標(biāo)計數(shù)器。

4 應(yīng)用中間件指標(biāo)監(jiān)控

4.1 Tomcat

4.1.1 監(jiān)控指標(biāo)說明

Tomcat主要監(jiān)控線程工作狀態(tài)纲辽、請求數(shù)颜武、 會話數(shù)、線程數(shù)拖吼、虛擬主機(jī)鳞上、JAVA虛擬機(jī)內(nèi)存占用情況。

4.1.2 監(jiān)控工具

4.1.2.1 Tomcat提供的manager

通過使用Applications Manager(又稱opManager)來進(jìn)行監(jiān)控吊档。

使用這種方式篙议,所監(jiān)控Tomcat必須運(yùn)行manager應(yīng)用,缺省情況下怠硼,該應(yīng)用總是運(yùn)行在服務(wù)器中的鬼贱。

增加Manager Role: 訪問manager應(yīng)用的用戶的角色權(quán)限必須是 manager. 修改/conf目錄下的tomcat-users.xml文件,在節(jié)點(diǎn)下添加一個user節(jié)點(diǎn)香璃,即可創(chuàng)建一個用戶这难。Tomcat版本不同配置也有差異,5.x和6.x創(chuàng)建的用戶角色應(yīng)為manager葡秒,7.x創(chuàng)建的用戶角色為manager-jmx姻乓,舉例如下:

在5.x和6.x中創(chuàng)建一個manager角色的用戶,用戶名為admin眯牧,密碼為chenfeng:

在7.x中創(chuàng)建一個manager角色的用戶蹋岩,用戶名為admin,密碼為xxxxx: 修改配置后学少,需要重新啟動 Tomcat 服務(wù)器剪个。連接manager時將用戶名/密碼指定為admin/xxxxxxxx

通過瀏覽器訪問http://localhost:8080/manager/jmxproxy?,輸入用戶名密碼旱易,然后就可以看到返回了所有的監(jiān)控信息

4.1.2.2 Probe

下載:?http://www.lambdaprobe.org/downloads/1.7/probe.1.7b.zip

解壓縮后禁偎,把probe.war放到TOMCAT的webapps下,設(shè)置server.xml 的context

設(shè)置用戶如下阀坏,在tomcat_user.xml中

vi /usr/local/tomcat/conf//tomcat-users.xml


設(shè)置環(huán)境變量如暖,獲取服務(wù)器狀態(tài) # vi /etc/profile JAVA_OPTS=-Dcom.sun.management.jmxremote export JAVA_OPTS

重啟動服務(wù)器

輸入http://localhost/probe/,輸入用戶名和密碼?即可進(jìn)入,這里比較精彩的是對內(nèi)存的監(jiān)視忌堂,動態(tài)顯示了JVM的內(nèi)存圖表

4.1.2.3 JConsole

Linux系統(tǒng)下盒至,需要修改 tomcat主目錄\bin\ catalina.sh文件 增加一行 CATALINA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=218.28.198.188 -Dcom.sun.management.jmxremote.port=9527 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" 然后使用JConsole就可以監(jiān)控Tomcat。 點(diǎn)擊%JAVA_HOME%\bin下的jconsole.exe即可

4.1.2.4 JProfile

安裝 首先到http://www.ej-technologies.com/download/overview.html?上下載 linux 和 windows版本的安裝文件. 將 linux版本的文件(jprofiler_linux_7_0_1.sh)士修,上傳到服務(wù)器上枷遂, 將其安裝。 安裝命令: sh jprofile_linux_7_0_1.sh –c 即可棋嘲。 Windows版本安裝忽略酒唉,一路next即可.

按照上圖 設(shè)置服務(wù)器上需要監(jiān)控的應(yīng)用啟動參數(shù), 如上內(nèi)容是:

agentpath:/home/ivanzhang/jprofile7/bin/linux-86/libjprofilerti.so=port=8849 將其加入到應(yīng)用的啟動腳本

設(shè)置好之后沸移, 服務(wù)器上的應(yīng)用痪伦,會等待你客戶端連接上以后,才真正啟動應(yīng)用雹锣。 Jprofile連接上之后网沾,則可以看到一下界面了, 它可以幫助你分析內(nèi)存信息蕊爵,線程信息辉哥,jdbc連接等等, 以下是監(jiān)控本地開發(fā)機(jī)的應(yīng)用情況攒射,可以看到醋旦,哪個線程在跑哪些SQL,由哪些方法調(diào)用的匆篓。

4.2 JBoss

4.2.1 監(jiān)控指標(biāo)說明

JBoss主要監(jiān)控線程工作狀態(tài)浑度、請求數(shù)、 會話數(shù)鸦概、線程數(shù)箩张、虛擬主機(jī)、JAVA虛擬機(jī)內(nèi)存占用情況窗市。

4.2.2 監(jiān)控工具

4.2.2.1 JBoss管理控制臺

如果需要監(jiān)控jboss的系統(tǒng)資源先慷,如:jboss的基本配置情況,jvm的利用率咨察,線程池的使用情況论熙,可以使用web-console進(jìn)行監(jiān)控。

配置web-console 具體方法同jmx-console摄狱,就是位置不同脓诡,具體方法參考jmx-console配置:

jboss-web xml 无午、 web.xml 在$JBOSS_HOME/vcom/deploy/management/console-mgr.sar/web-console.war/WEB-INF下;

login-config.xml還是原來的那個祝谚,把a(bǔ)pplication-policy名為$webConsoleDomain的部分改成你需要的web-console宪迟;

web-console-users.properties、web-console-roles.properties定義了訪問 web-console的用戶交惯、用戶角色次泽,具體位置,使用find /jboss -name web-console-users.properties 找到以后可以修改用戶名席爽、密碼意荤。

監(jiān)控 使用http://localhost:8080/web-console/?中,獲取當(dāng)前JBOSS-WEB應(yīng)用模塊的負(fù)載分擔(dān)情況只锻,并可以查看到當(dāng)前JAVA虛擬機(jī)的內(nèi)存使用情況玖像,及線程池使用情況。 使用http://localhost:8080/web-console/status炬藤,可以進(jìn)一步監(jiān)控到每個線程的狀態(tài)御铃。

4.2.2.2 Probe

具體可以參照4.1.2.2 Probe

4.2.2.3 JConsole

具體可以參照4.1.2.3 JConsole

4.2.2.4 JProfile

具體可以參照4.1.2.4 JProfile

4.3 IIS監(jiān)控

4.3.1 監(jiān)控指標(biāo)說明

主要針對會話、事務(wù)沈矿、緩存上真、內(nèi)存、線程池等進(jìn)行監(jiān)控羹膳,具體如下:

ASP Session Duration 最近進(jìn)行的會話所持續(xù)的時間(以毫秒為單位)睡互。

ASP Sessions Current 正在使用服務(wù)的會話數(shù)。

IIS Global Total Files Cached 添加到 WWW 和 FTP 服務(wù)的緩存的文件總數(shù)陵像。

Web Total Not Found Errors 由于未找到所請求的文檔就珠,Web 服務(wù)無法滿足的請求數(shù);通常以 HTTP 404 錯誤代碼方式向客戶端報告醒颖。

ASP Transactions Committed 已提交的事務(wù)數(shù)妻怎。

ASP Transactions Pending 正在處理的事務(wù)數(shù)。

ASP Transactions/Sec 每秒啟動的事務(wù)數(shù)泞歉。

IIS Global URI Cache Hits URI 緩存中的成功查找總數(shù)逼侦。

IIS Global URI Cache Hits % URI 緩存命中數(shù)占全部緩存請求的比率。

IIS Global URI Cache Misses URI 緩存中的未成功查找總數(shù)

4.3.2 監(jiān)控工具

4.3.2.1 集成的性能監(jiān)視器

在性能監(jiān)視器里面添加IIS應(yīng)用計數(shù)器即可腰耙。

4.4 JVM

4.4.1 監(jiān)控指標(biāo)說明

JVM關(guān)注的指標(biāo)主要是java虛擬機(jī)內(nèi)存年輕代榛丢、年老代堆大小以及GC頻率及回收時間。 JVM堆內(nèi)存結(jié)構(gòu)如下:

Young(年輕代) 年輕代分三個區(qū)挺庞。一個Eden區(qū)晰赞,兩個 Survivor區(qū)。大部分對象在Eden區(qū)中生成。當(dāng)Eden區(qū)滿時掖鱼,還存活的對象將被復(fù)制到Survivor區(qū)(兩個中的一個)然走,當(dāng)這個 Survivor區(qū)滿時,此區(qū)的存活對象將被復(fù)制到另外一個Survivor區(qū)戏挡,當(dāng)這個Survivor區(qū)也滿了的時候丰刊,從第一個Survivor區(qū)復(fù)制過來的并且此時還存活的對象,將被復(fù)制“年老區(qū)(Tenured)”增拥。需要注意,Survivor的兩個區(qū)是對稱的寻歧,沒先后關(guān)系掌栅,所以同一個區(qū)中可能同時存在從Eden復(fù)制過來對象,和從前一個Survivor復(fù)制過來的對象码泛,而復(fù)制到年老區(qū)的只有從第一個Survivor去過來的對象猾封。而且,Survivor區(qū)總有一個是空的噪珊。

Tenured(年老代) 年老代存放從年輕代存活的對象晌缘。一般來說年老代存放的都是生命期較長的對象。

Perm(持久代) 用 于存放靜態(tài)文件痢站,如今Java類磷箕、方法等。持久代對垃圾回收沒有顯著影響阵难,但是有些應(yīng)用可能動態(tài)生成或者調(diào)用一些class岳枷,例如Hibernate等, 在這種時候需要設(shè)置一個比較大的持久代空間來存放這些運(yùn)行過程中新增的類呜叫。持久代大小通過-XX:MaxPermSize=進(jìn)行設(shè)置空繁。 發(fā)生在年輕代的垃圾回收叫做GC/Minor GC,發(fā)生在年老代和永久代的垃圾回收叫做Full GC.

4.4.2 監(jiān)控工具

4.4.2.1 JVM自帶的jstat

jstat -gc pid 可以顯示gc的信息,查看gc的次數(shù)朱庆,及時間盛泡。 其中最后五項,分別是young gc的次數(shù)娱颊,young gc的時間傲诵,full gc的次數(shù),full gc的時間维蒙,gc的總時間掰吕。

jstat -gccapacity pid 可以顯示,VM內(nèi)存中三代(young,old,perm)對象的使用和占用大小,如:PGCMN顯示的是最小perm的內(nèi)存使用量颅痊,PGCMX顯示的是perm的內(nèi)存最大使用量殖熟, PGC是當(dāng)前新生成的perm內(nèi)存占用量,PC是但前perm內(nèi)存占用量斑响。 其他的可以根據(jù)這個類推菱属, OC是old內(nèi)純的占用量钳榨。

jstat -gcutil pid 統(tǒng)計gc信息統(tǒng)計。

jstat -gcnew pid 年輕代對象的信息纽门。

jstat -gcnewcapacity pid 年輕代對象的信息及其占用量薛耻。

jstat -gcold pid old代對象的信息。

jstat -gcoldcapacity pid old代對象的信息及其占用量赏陵。

jstat -gcpermcapacity pid perm對象的信息及其占用量饼齿。

jstat -class pid 顯示加載class的數(shù)量,及所占空間等信息蝙搔。

jstat -compiler pid 顯示VM實時編譯的數(shù)量等信息缕溉。

jstat -printcompilation pid 當(dāng)前VM執(zhí)行的信息。 Jstat顯示的信息中一些術(shù)語的中文解釋:

S0C:年輕代中第一個survivor(幸存區(qū))的容量 (字節(jié))

S1C:年輕代中第二個survivor(幸存區(qū))的容量 (字節(jié))

S0U:年輕代中第一個survivor(幸存區(qū))目前已使用空間 (字節(jié))

S1U:年輕代中第二個survivor(幸存區(qū))目前已使用空間 (字節(jié))

EC:年輕代中Eden(伊甸園)的容量 (字節(jié))

EU:年輕代中Eden(伊甸園)目前已使用空間 (字節(jié))

OC:Old代的容量 (字節(jié))

OU:Old代目前已使用空間 (字節(jié))

PC:Perm(持久代)的容量 (字節(jié))

PU:Perm(持久代)目前已使用空間 (字節(jié))

YGC:從應(yīng)用程序啟動到采樣時年輕代中g(shù)c次數(shù)

YGCT:從應(yīng)用程序啟動到采樣時年輕代中g(shù)c所用時間(s)

FGC:從應(yīng)用程序啟動到采樣時old代(全gc)gc次數(shù)

FGCT:從應(yīng)用程序啟動到采樣時old代(全gc)gc所用時間(s)

GCT:從應(yīng)用程序啟動到采樣時gc用的總時間(s)

NGCMN:年輕代(young)中初始化(最小)的大小 (字節(jié))

NGCMX:年輕代(young)的最大容量 (字節(jié))

NGC:年輕代(young)中當(dāng)前的容量 (字節(jié))

OGCMN:old代中初始化(最小)的大小 (字節(jié))

OGCMX:old代的最大容量 (字節(jié))

OGC:old代當(dāng)前新生成的容量 (字節(jié))

PGCMN:perm代中初始化(最小)的大小 (字節(jié))

PGCMX:perm代的最大容量 (字節(jié))

PGC:perm代當(dāng)前新生成的容量 (字節(jié))

S0:年輕代中第一個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比

S1:年輕代中第二個survivor(幸存區(qū))已使用的占當(dāng)前容量百分比

E:年輕代中Eden(伊甸園)已使用的占當(dāng)前容量百分比

O:old代已使用的占當(dāng)前容量百分比

P:perm代已使用的占當(dāng)前容量百分比

S0CMX:年輕代中第一個survivor(幸存區(qū))的最大容量 (字節(jié))

S1CMX :年輕代中第二個survivor(幸存區(qū))的最大容量 (字節(jié))

ECMX:年輕代中Eden(伊甸園)的最大容量 (字節(jié))

DSS:當(dāng)前需要survivor(幸存區(qū))的容量 (字節(jié))(Eden區(qū)已滿)

TT: 持有次數(shù)限制

MTT : 最大持有次數(shù)限制

4.4.2.2 shell

將jstat中感興趣的相關(guān)指標(biāo)通過shell保存為文件吃型,例如以下shell是每隔2秒鐘將jstat監(jiān)控的信息保存到文件中证鸥。

while true;do /usr/local/java/bin/jstat -gcutil `/usr/local/java/bin/jps | grep -v 'Jps' | grep -v 'Jstat' | egrep 'OrderPlatformLauncher|Bootstrap|TcpServerLauncher'| awk '{print $1}'` | grep -v 'S0' | awk '{print strftime("%m-%d-%H:%M:%S",systime()),$0}';sleep 2;done >> `hostname`_`date +%Y%m%d_%H%M`.jstat

4.4.2.3 jmap

jmap命令可以獲得運(yùn)行中的jvm的堆的快照,從而可以離線分析堆勤晚,以檢查內(nèi)存泄漏枉层,檢查一些嚴(yán)重影響性能的大對象的創(chuàng)建,檢查系統(tǒng)中什么對象最多赐写,各種對象所占內(nèi)存的大小等等

命令格式 jmap [options] pid -dump:[live,]format=b,file= --dump堆到文件,live指明是活著的對象,file指定文件名鸟蜡。

因為在dump:live前會進(jìn)行full gc,因此不加live的堆大小要大于加live堆的大小 -finalizerinfo 打印等待回收對象的信息

-heap 打印堆總結(jié)

-histo[:live] 打印堆的對象統(tǒng)計挺邀,包括對象數(shù)矩欠、內(nèi)存大小等等

-permstat 打印java堆perm區(qū)的classloader統(tǒng)計

-F 強(qiáng)制,在jmap -dump或jmap -histo中使用悠夯,如果pid沒有相應(yīng)的回復(fù) -J 提供jvm選項癌淮,如:-J-Xms256m

4.4.2.4 jstack

介紹 jstack用于打印出給定的java進(jìn)程ID或core file或遠(yuǎn)程調(diào)試服務(wù)的Java堆棧信息,如果是在64位機(jī)器上沦补,需要指定選項"-J-d64"乳蓄,Windows的jstack使用方式只支持以下的這種方式:

jstack [-l] pid

如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息夕膀,從而 可以輕松地知道java程序是如何崩潰和在程序何處發(fā)生問題虚倒。另外,jstack工具還可以附屬到正在運(yùn)行的java程序中产舞,看到當(dāng)時運(yùn)行的java程序 的java stack和native stack的信息, 如果現(xiàn)在運(yùn)行的java程序呈現(xiàn)hung的狀態(tài)魂奥,jstack是非常有用的。

命令格式

jstack [ option ] pid

jstack [ option ] executable core

jstack [ option ] [server-id@]remote-hostname-or-IP

常用參數(shù)說明

options:

executable Java executable from which the core dump was produced.

(可能是產(chǎn)生core dump的java可執(zhí)行程序)

core 將被打印信息的core dump文件

remote-hostname-or-IP 遠(yuǎn)程debug服務(wù)的主機(jī)名或ip

server-id 唯一id,假如一臺主機(jī)上多個遠(yuǎn)程debug服務(wù)

基本參數(shù):

-F當(dāng)’jstack [-l] pid’沒有相應(yīng)的時候強(qiáng)制打印棧信息

-l長列表. 打印關(guān)于鎖的附加信息,例如屬于java.util.concurrent的ownable synchronizers列表.

-m打印java和native c/c++框架的所有棧信息.

-h | -help打印幫助信息

pid 需要被打印配置信息的java進(jìn)程id,可以用jps查詢.

使用示例

4.4.2.5 JProfile

JProfile也可以監(jiān)控JVM,并且以圖形化的方式進(jìn)行展示易猫,方便信息的查看及分析耻煤。具體可以參照4.1.2.4章節(jié)。

4.4.2.6 JConsole

JConsole也可以監(jiān)控JVM,并且以圖形化的方式進(jìn)行展示,方便信息的查看及分析哈蝇。具體可以參照4.1.2.3章節(jié)棺妓。

4.5 .NET CLR

4.5.1 監(jiān)控指標(biāo)說明

.NET CLR是有微軟開發(fā)的一臺虛擬平臺,支持C#/C++/VB等炮赦,此虛擬平臺功能類似于JVM. .NET CLR主要功能如下:

平臺無關(guān)

跨語言集成

自動內(nèi)存管理

版本控制

安全 .NET CLR Memory計數(shù)器如下:

性能計數(shù)器 說明

指標(biāo)解釋

# Bytes in all Heaps(所有堆中的字節(jié)數(shù))顯示以下計數(shù)器值的總和怜跑,此計數(shù)器指示在垃圾回收堆上分配的當(dāng)前內(nèi)存(以字節(jié)為單位)。

# GC Handles(GC 處理數(shù)目)顯示正在使用的垃圾回收處理的當(dāng)前數(shù)目吠勘。

# Gen 0 Collections(第 2 級回收次數(shù))顯示自應(yīng)用程序啟動后第 0 級對象(即最年輕性芬、最近分配的對象)被垃圾回收的次數(shù)。

# Gen 1 Collections(第 2 級回收次數(shù))顯示自應(yīng)用程序啟動后對第 1 級對象進(jìn)行垃圾回收的次數(shù)剧防。

# Gen 2 Collections(第 2 級回收次數(shù))顯示自應(yīng)用程序啟動后對第 2 級對象進(jìn)行垃圾回收的次數(shù)批旺。此計數(shù)器在第 2 級垃圾回收(也稱作完整垃圾回收)結(jié)束時遞增。

# Induced GC(引發(fā)的 GC 的數(shù)目)顯示由于對 GC.Collect 的顯式調(diào)用而執(zhí)行的垃圾回收的峰值次數(shù)诵姜。讓垃圾回收器對其回收的頻率進(jìn)行微調(diào)是切實可行的。

# of Pinned Objects(釘住的對象的數(shù)目)顯示上次垃圾回收中遇到的釘住的對象的數(shù)目搏熄。釘住的對象是垃圾回收器不能移入內(nèi)存的對象棚唆。

# of Sink Blocks in use(正在使用的接收塊的數(shù)目)顯示正在使用的同步塊的當(dāng)前數(shù)目。同步塊是為存儲同步信息分配的基于對象的數(shù)據(jù)結(jié)構(gòu)心例。

# Total committed Bytes(提交字節(jié)的總數(shù))顯示垃圾回收器當(dāng)前提交的虛擬內(nèi)存量(以字節(jié)為單位)宵凌。提交的內(nèi)存是在磁盤頁面文件中保留的空間的物理內(nèi)存。

# Total reserved Bytes(保留字節(jié)的總數(shù))顯示垃圾回收器當(dāng)前保留的虛擬內(nèi)存量(以字節(jié)為單位)止后。保留內(nèi)存是為應(yīng)用程序保留(但尚未使用任何磁盤或主內(nèi)存頁)的虛擬內(nèi)存空間瞎惫。

% Time in GC(GC 中時間的百分比)顯示自上次垃圾回收周期后執(zhí)行垃圾回收所用運(yùn)行時間的百分比。

Allocated Bytes/second(每秒分配的字節(jié)數(shù))顯示每秒在垃圾回收堆上分配的字節(jié)數(shù)译株。

Finalization Survivors(完成時存留對象數(shù)目)顯示因正等待完成而從回收后保留下來的進(jìn)行垃圾回收的對象的數(shù)目瓜喇。如果這些對象保留對其他對象的引用,則那些對象也保留下來歉糜,但此計數(shù)器不對它們計數(shù)乘寒。

Gen 0 heap size(第 2 級堆大小)顯示在第 0 級中可以分配的最大字節(jié)數(shù)匪补;它不指示在第 0 級中當(dāng)前分配的字節(jié)數(shù)伞辛。

Gen 0 Promoted Bytes/Sec(從第 1 級提升的字節(jié)數(shù)/秒)顯示每秒從第 0 級提升到第 1 級的字節(jié)數(shù)。內(nèi)存在從垃圾回收保留下來后被提升夯缺。

Gen 1 heap size(第 2 級堆大性槭稀)顯示第 1 級中的當(dāng)前字節(jié)數(shù);此計數(shù)器不顯示第 1 級的最大大小踊兜。

Gen 1 Promoted Bytes/Sec(從第 1 級提升的字節(jié)數(shù)/秒)顯示每秒從第 1 級提升到第 2 級的字節(jié)數(shù)竿滨。在此計數(shù)器中不包括只因正等待完成而被提升的對象。

Gen 2 heap size(第 2 級堆大小)顯示第 2 級中當(dāng)前字節(jié)數(shù)姐呐。不直接在此代中分配對殿怜。

Large Object Heap size(大對象堆大小)顯示大對象堆的當(dāng)前大惺锷啊(以字節(jié)為單位)头谜。垃圾回收器將大于 20 KB 的對象視作大對象并且直接在特殊堆中分配大對象;

Promoted Finalization-Memory from Gen 0(從第 1 級提升的完成內(nèi)存)顯示只因等待完成而從第 0 級提升到第 1 級的內(nèi)存的字節(jié)數(shù)鸠澈。

Promoted Finalization-Memory from Gen 1(從第 1 級提升的完成內(nèi)存)顯示只因等待完成而從第 1 級提升到第 2 級的內(nèi)存的字節(jié)數(shù)柱告。

Promoted Memory from Gen 0(從第 1 級提升的內(nèi)存)顯示在垃圾回收后保留下來并且從第 0 級提升到第 1 級的內(nèi)存的字節(jié)數(shù)。

Promoted Memory from Gen 1(從第 1 級提升的內(nèi)存)顯示在垃圾回收后保留下來并且從第 1 級提升到第 2 級的內(nèi)存的字節(jié)數(shù)笑陈。

4.5.2 監(jiān)控工具

4.5.2.1 集成的性能監(jiān)視器

Windows性能監(jiān)視器中际度,可以將.NET CLR Memory中相關(guān)的計數(shù)器加入到監(jiān)控中。

4.5.2.2 .NET Memory Profiler

Profiler可以調(diào)試4種類型的.NET程序,分別為:

桌面應(yīng)用程序

WPF程序

ASP.NET程序

.NET Service程序 對應(yīng)選擇軟件的文件菜單如下

Profler調(diào)試共有三種方式選擇:

啟動跟蹤(Profiler Application)

選定對應(yīng)的調(diào)試方式,如調(diào)試桌面程序,選中Profiler Application,然后選擇需要啟動的執(zhí)行文件,Profiler將作為宿主程序啟動程序開始實時監(jiān)控內(nèi)存.

附加進(jìn)程(Attach Process)

將Profiler附加到指定的進(jìn)程上,此時不能實時監(jiān)控內(nèi)存情況,只能夠收集內(nèi)存鏡像.

導(dǎo)入內(nèi)存鏡像(Import Memory Dump)

可以選擇dmp為后綴的內(nèi)存鏡像文件,比如Windbg以及DebugDiag導(dǎo)出的鏡像文件,此時不能實時監(jiān)控內(nèi)存情況,只能夠收集內(nèi)存鏡像且不能跟蹤非托管資源.

具體操作如下:

啟動程序

首先,選擇需要調(diào)試類型,選擇 Profiler Application,選擇好需要啟動的程序exe文件.

如果需要設(shè)置啟動參數(shù),則設(shè)置好命令行參數(shù)以及工作目錄.

選擇”Next”進(jìn)行收集數(shù)據(jù)的一些選項設(shè)置,一般直接按”Star”按鈕開始調(diào)試程序.

收集數(shù)據(jù)

選擇菜單欄的收集按鈕,收集堆數(shù)據(jù),第一個為收集全部堆上的數(shù)據(jù),第二個為只收集第0代的數(shù)據(jù).

重新啟動和停止

調(diào)試完畢后通過停止按鈕跟蹤程序,通過啟動按鈕重新啟動上一次的調(diào)試程序.

查看收集數(shù)據(jù)

Profiler上有6個頁卡,分別為:

Type/Resource 類型/資源頁卡

Type/Resource Details類型/資源明細(xì)頁卡

Instance Details 實例明細(xì)頁卡

Call Stacks/Methods調(diào)用堆棧頁卡

Navtive Memory 本地內(nèi)存頁卡

Real-Time-實時跟蹤頁卡

5 數(shù)據(jù)庫指標(biāo)監(jiān)控

5.1 MySQL

5.1.1 監(jiān)控指標(biāo)說明

主要針對SQL耗時涵妥、吞吐量(QPS/TPS)乖菱、命中率、鎖等待等指標(biāo)進(jìn)行監(jiān)控蓬网。

5.1.2 監(jiān)控工具

5.1.2.1 命令

效率低下SQL

mysqldumpslow -s at -t 20 host-slow.log

#mysql qps查詢 QPS = Questions(or Queries) / Seconds

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "Questions"'

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "Queries"'

#mysql Key Buffer 命中率

key_buffer_read_hits = (1 - Key_reads / Key_read_requests)100% key_buffer_write_hits= (1 - Key_writes / Key_write_requests)100%

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "Key%"'

#mysql Innodb Buffer 命中率

innodb_buffer_read_hits=(1-Innodb_buffer_pool_reads/ Innodb_buffer_pool_read_requests)100%

mysql -u root -p123456 -e 'SHOW /

!50000 GLOBAL */ STATUS LIKE "Innodb_buffer_pool_read%"'

#mysql Query Cache 命中率

Query_cache_hits= (Qcache_hits / (Qcache_hits + Qcache_inserts))100%

mysql -u root -p123456 -e 'SHOW /

!50000 GLOBAL */ STATUS LIKE "Qcache%"'

#mysql Table Cache 狀態(tài)量

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "Open%"'

#mysql Thread Cache 命中率

Thread_cache_hits = (1 - Threads_created / Connections)100% 正常來說,Thread Cache 命中率要在 90% 以上才算比較合理窒所。

mysql -u root -p123456 -e 'SHOW /

!50000 GLOBAL */ STATUS LIKE "Thread%"'

#mysql 鎖定狀態(tài)

鎖定狀態(tài)包括表鎖和行鎖兩種,我們可以通過系統(tǒng)狀態(tài)變量獲得鎖定總次數(shù),鎖定造成其他線程等待的次數(shù),以及鎖定等待時間信息

mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "%lock%"'

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帆锋,隨后出現(xiàn)的幾起案子吵取,更是在濱河造成了極大的恐慌,老刑警劉巖锯厢,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件皮官,死亡現(xiàn)場離奇詭異,居然都是意外死亡实辑,警方通過查閱死者的電腦和手機(jī)捺氢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剪撬,“玉大人讯沈,你說我怎么就攤上這事⌒霰迹” “怎么了缺狠?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長萍摊。 經(jīng)常有香客問我挤茄,道長冰木,這世上最難降的妖魔是什么穷劈? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任笼恰,我火速辦了婚禮,結(jié)果婚禮上歇终,老公的妹妹穿的比我還像新娘社证。我一直安慰自己,他們只是感情好评凝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布追葡。 她就那樣靜靜地躺著,像睡著了一般奕短。 火紅的嫁衣襯著肌膚如雪宜肉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天翎碑,我揣著相機(jī)與錄音谬返,去河邊找鬼。 笑死日杈,一個胖子當(dāng)著我的面吹牛遣铝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莉擒,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酿炸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了啰劲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤檀何,失蹤者是張志新(化名)和其女友劉穎蝇裤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體频鉴,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栓辜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了垛孔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藕甩。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖周荐,靈堂內(nèi)的尸體忽然破棺而出狭莱,到底是詐尸還是另有隱情,我是刑警寧澤概作,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布腋妙,位于F島的核電站,受9級特大地震影響讯榕,放射性物質(zhì)發(fā)生泄漏骤素。R本人自食惡果不足惜匙睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望济竹。 院中可真熱鬧痕檬,春花似錦、人聲如沸送浊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽罕袋。三九已至改淑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浴讯,已是汗流浹背朵夏。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留榆纽,地道東北人仰猖。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像奈籽,于是被迫代替她去往敵國和親饥侵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容