?摘自:https://help.aliyun.com/document_detail/29341.html?spm=5176.doc29330.6.612.e9kTtv
1 引言
1.1 編寫目的
本文檔主要目標是規范使用性能測試過程中需監控的各項技術指標,描述各指標項的具體含義,并給出相應的監控工具與方法說明。本文檔將作為測試監控的指導性規范,用以選取監控關注指標,使用監控工具。
1.2 適用對象和范圍
監控指標及監控工具適用于使用性能測試進行性能測試項目技術質量評價依據。 預期讀者為測試管理人員、測試實施人員、技術支持人員、項目質量管理人員、項目管理人員等系統技術質量相關人員。
1.3 參考文檔
相關的指標定義及解釋可以參照:性能測試指標,本章可能會增加及減少相關指標的描述,并不與性能測試指標中相關指標沖突。
2 業務指標監控
2.1 監控指標
業務指標主要包括并發用戶數、響應時間、處理能力,成功率這四個指標,目前大部分壓測工具都能將這些指標放在壓測工具里面。
2.2 監控工具
2.2.1 性能測試
性能測試分布式壓測工具,將相關業務指標集成在平臺上。
2.2.2 后臺日志
通過后臺日志log,采用分析工具也可進行分析得出TPS,響應時間等。
3 操作系統指標監控
3.1 Linux
3.1.1 監控指標說明
指標類型指標名稱指標描述
CPUCPU utilizationCPU 的使用時間百分比
System mode CPU utilization在系統模式下使用 CPU 的時間百分比
User mode CPU utilization在用戶模式下使用 CPU 的時間百分比
MemoryPage-in rate每秒鐘讀入到物理內存中的頁數
Page-out rate每秒鐘寫入頁面文件和從物理內存中刪除的頁數
Paging rate每秒鐘讀入物理內存或寫入頁面文件的頁數
DiskDisk rate磁盤傳輸速率
3.1.2 監控工具
3.1.2.1 性能測試
性能測試壓測工具監控操作系統指標主要有:
CPU%:所有CPU資源利用率
網絡流量:每秒入網出網多少Kb
磁盤:每秒讀寫多少Kb
3.1.2.2 命令
Linux提供豐富的命令進行監控,針對CPU、Memory、I/O等有一些列命令及參數進行監控。具體如下:
top : 整體查看資源情況。
sar :CPU資源消耗
vmstat:內存相關消耗
iostat: 磁盤相關消耗
………
具體用法和參數,可以參照聯機幫助(man top等)。
3.1.2.3 Shell
可以將以上命令通過shell來包裝,每隔多少秒監控一次,總共監控多少次,將監控結果寫到文件里面。
例如:下面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 文件復制到計算機。如果使用 FTP,請記住使用二進制模式。
解壓該文件,運行 gzip -d nmonXXX.tar.gz
提取該文件,運行tar xvf nmonXXX.tar
Nmon實時監控 登陸要監控的系統,進入nmon安裝目錄中
輸入命令nmon,運行 nmon(如root用戶可能需要輸入./nmon).顯示的起始屏幕及CPU等信息。如圖:
依次按c,m,d即可顯示CPU,內存,磁盤等信息。如圖:
Nmon運行時的鍵盤命令
命令說明
c提供關于物理CPU使用的詳細信息
m提供內存使用的詳細信息:系統(內核)和進程,活動虛擬內存
d提供關于磁盤,磁盤類型大小,可用空間,卷組,適配器等更詳細的信息
t當前進程詳細情
PPaging space 使用情況
k顯示內核信息
+Nmon 結果保存為文件
Nmon 結果保存為文件 nmon -f -s 60 -c 30(每60s收集一次數據,共收集30次) nmon.sh 賦執行權限:chmod +x nmon.sh 執行nmon.sh 即可運行.
3.2 Windows
3.2.1 監控指標說明
提供的監控指標比較豐富,包括CPU、內存、網絡、磁盤以及每個進程的資源。
3.2.2 監控工具
3.2.2.1 性能測試
同3.1.2.1 性能測試
3.2.2.2 資源管理器
Windows操作系統自帶的windows資源管理器,在任務欄里面點擊右鍵,啟動任務管理器:
點擊性能面板,再點擊資源監視器:
3.2.2.3 性能監視器
Windows有自帶的性能監視器,可以指定相關的監控指標進行監控,將結果保存為文件,從windows控制面板->管理工具->性能監視器->新建數據搜集器,添加你感興趣的指標計數器。
4 應用中間件指標監控
4.1 Tomcat
4.1.1 監控指標說明
Tomcat主要監控線程工作狀態、請求數、 會話數、線程數、虛擬主機、JAVA虛擬機內存占用情況。
4.1.2 監控工具
4.1.2.1 Tomcat提供的manager
通過使用Applications Manager(又稱opManager)來進行監控。
使用這種方式,所監控Tomcat必須運行manager應用,缺省情況下,該應用總是運行在服務器中的。
增加Manager Role: 訪問manager應用的用戶的角色權限必須是 manager. 修改/conf目錄下的tomcat-users.xml文件,在節點下添加一個user節點,即可創建一個用戶。Tomcat版本不同配置也有差異,5.x和6.x創建的用戶角色應為manager,7.x創建的用戶角色為manager-jmx,舉例如下:
在5.x和6.x中創建一個manager角色的用戶,用戶名為admin,密碼為chenfeng:
在7.x中創建一個manager角色的用戶,用戶名為admin,密碼為xxxxx: 修改配置后,需要重新啟動 Tomcat 服務器。連接manager時將用戶名/密碼指定為admin/xxxxxxxx
通過瀏覽器訪問http://localhost:8080/manager/jmxproxy?,輸入用戶名密碼,然后就可以看到返回了所有的監控信息
4.1.2.2 Probe
下載:?http://www.lambdaprobe.org/downloads/1.7/probe.1.7b.zip
解壓縮后,把probe.war放到TOMCAT的webapps下,設置server.xml 的context
設置用戶如下,在tomcat_user.xml中
vi /usr/local/tomcat/conf//tomcat-users.xml
設置環境變量,獲取服務器狀態 # vi /etc/profile JAVA_OPTS=-Dcom.sun.management.jmxremote export JAVA_OPTS
重啟動服務器
輸入http://localhost/probe/,輸入用戶名和密碼?即可進入,這里比較精彩的是對內存的監視,動態顯示了JVM的內存圖表
4.1.2.3 JConsole
Linux系統下,需要修改 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就可以監控Tomcat。 點擊%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),上傳到服務器上, 將其安裝。 安裝命令: sh jprofile_linux_7_0_1.sh –c 即可。 Windows版本安裝忽略,一路next即可.
按照上圖 設置服務器上需要監控的應用啟動參數, 如上內容是:
agentpath:/home/ivanzhang/jprofile7/bin/linux-86/libjprofilerti.so=port=8849 將其加入到應用的啟動腳本
設置好之后, 服務器上的應用,會等待你客戶端連接上以后,才真正啟動應用。 Jprofile連接上之后,則可以看到一下界面了, 它可以幫助你分析內存信息,線程信息,jdbc連接等等, 以下是監控本地開發機的應用情況,可以看到,哪個線程在跑哪些SQL,由哪些方法調用的。
4.2 JBoss
4.2.1 監控指標說明
JBoss主要監控線程工作狀態、請求數、 會話數、線程數、虛擬主機、JAVA虛擬機內存占用情況。
4.2.2 監控工具
4.2.2.1 JBoss管理控制臺
如果需要監控jboss的系統資源,如:jboss的基本配置情況,jvm的利用率,線程池的使用情況,可以使用web-console進行監控。
配置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還是原來的那個,把application-policy名為$webConsoleDomain的部分改成你需要的web-console;
web-console-users.properties、web-console-roles.properties定義了訪問 web-console的用戶、用戶角色,具體位置,使用find /jboss -name web-console-users.properties 找到以后可以修改用戶名、密碼。
監控 使用http://localhost:8080/web-console/?中,獲取當前JBOSS-WEB應用模塊的負載分擔情況,并可以查看到當前JAVA虛擬機的內存使用情況,及線程池使用情況。 使用http://localhost:8080/web-console/status,可以進一步監控到每個線程的狀態。
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監控
4.3.1 監控指標說明
主要針對會話、事務、緩存、內存、線程池等進行監控,具體如下:
ASP Session Duration 最近進行的會話所持續的時間(以毫秒為單位)。
ASP Sessions Current 正在使用服務的會話數。
IIS Global Total Files Cached 添加到 WWW 和 FTP 服務的緩存的文件總數。
Web Total Not Found Errors 由于未找到所請求的文檔,Web 服務無法滿足的請求數;通常以 HTTP 404 錯誤代碼方式向客戶端報告。
ASP Transactions Committed 已提交的事務數。
ASP Transactions Pending 正在處理的事務數。
ASP Transactions/Sec 每秒啟動的事務數。
IIS Global URI Cache Hits URI 緩存中的成功查找總數。
IIS Global URI Cache Hits % URI 緩存命中數占全部緩存請求的比率。
IIS Global URI Cache Misses URI 緩存中的未成功查找總數
4.3.2 監控工具
4.3.2.1 集成的性能監視器
在性能監視器里面添加IIS應用計數器即可。
4.4 JVM
4.4.1 監控指標說明
JVM關注的指標主要是java虛擬機內存年輕代、年老代堆大小以及GC頻率及回收時間。 JVM堆內存結構如下:
Young(年輕代) 年輕代分三個區。一個Eden區,兩個 Survivor區。大部分對象在Eden區中生成。當Eden區滿時,還存活的對象將被復制到Survivor區(兩個中的一個),當這個 Survivor區滿時,此區的存活對象將被復制到另外一個Survivor區,當這個Survivor區也滿了的時候,從第一個Survivor區復制過來的并且此時還存活的對象,將被復制“年老區(Tenured)”。需要注意,Survivor的兩個區是對稱的,沒先后關系,所以同一個區中可能同時存在從Eden復制過來對象,和從前一個Survivor復制過來的對象,而復制到年老區的只有從第一個Survivor去過來的對象。而且,Survivor區總有一個是空的。
Tenured(年老代) 年老代存放從年輕代存活的對象。一般來說年老代存放的都是生命期較長的對象。
Perm(持久代) 用 于存放靜態文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應用可能動態生成或者調用一些class,例如Hibernate等, 在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新增的類。持久代大小通過-XX:MaxPermSize=進行設置。 發生在年輕代的垃圾回收叫做GC/Minor GC,發生在年老代和永久代的垃圾回收叫做Full GC.
4.4.2 監控工具
4.4.2.1 JVM自帶的jstat
jstat -gc pid 可以顯示gc的信息,查看gc的次數,及時間。 其中最后五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。
jstat -gccapacity pid 可以顯示,VM內存中三代(young,old,perm)對象的使用和占用大小,如:PGCMN顯示的是最小perm的內存使用量,PGCMX顯示的是perm的內存最大使用量, PGC是當前新生成的perm內存占用量,PC是但前perm內存占用量。 其他的可以根據這個類推, OC是old內純的占用量。
jstat -gcutil pid 統計gc信息統計。
jstat -gcnew pid 年輕代對象的信息。
jstat -gcnewcapacity pid 年輕代對象的信息及其占用量。
jstat -gcold pid old代對象的信息。
jstat -gcoldcapacity pid old代對象的信息及其占用量。
jstat -gcpermcapacity pid perm對象的信息及其占用量。
jstat -class pid 顯示加載class的數量,及所占空間等信息。
jstat -compiler pid 顯示VM實時編譯的數量等信息。
jstat -printcompilation pid 當前VM執行的信息。 Jstat顯示的信息中一些術語的中文解釋:
S0C:年輕代中第一個survivor(幸存區)的容量 (字節)
S1C:年輕代中第二個survivor(幸存區)的容量 (字節)
S0U:年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
S1U:年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
EC:年輕代中Eden(伊甸園)的容量 (字節)
EU:年輕代中Eden(伊甸園)目前已使用空間 (字節)
OC:Old代的容量 (字節)
OU:Old代目前已使用空間 (字節)
PC:Perm(持久代)的容量 (字節)
PU:Perm(持久代)目前已使用空間 (字節)
YGC:從應用程序啟動到采樣時年輕代中gc次數
YGCT:從應用程序啟動到采樣時年輕代中gc所用時間(s)
FGC:從應用程序啟動到采樣時old代(全gc)gc次數
FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
GCT:從應用程序啟動到采樣時gc用的總時間(s)
NGCMN:年輕代(young)中初始化(最小)的大小 (字節)
NGCMX:年輕代(young)的最大容量 (字節)
NGC:年輕代(young)中當前的容量 (字節)
OGCMN:old代中初始化(最小)的大小 (字節)
OGCMX:old代的最大容量 (字節)
OGC:old代當前新生成的容量 (字節)
PGCMN:perm代中初始化(最小)的大小 (字節)
PGCMX:perm代的最大容量 (字節)
PGC:perm代當前新生成的容量 (字節)
S0:年輕代中第一個survivor(幸存區)已使用的占當前容量百分比
S1:年輕代中第二個survivor(幸存區)已使用的占當前容量百分比
E:年輕代中Eden(伊甸園)已使用的占當前容量百分比
O:old代已使用的占當前容量百分比
P:perm代已使用的占當前容量百分比
S0CMX:年輕代中第一個survivor(幸存區)的最大容量 (字節)
S1CMX :年輕代中第二個survivor(幸存區)的最大容量 (字節)
ECMX:年輕代中Eden(伊甸園)的最大容量 (字節)
DSS:當前需要survivor(幸存區)的容量 (字節)(Eden區已滿)
TT: 持有次數限制
MTT : 最大持有次數限制
4.4.2.2 shell
將jstat中感興趣的相關指標通過shell保存為文件,例如以下shell是每隔2秒鐘將jstat監控的信息保存到文件中。
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命令可以獲得運行中的jvm的堆的快照,從而可以離線分析堆,以檢查內存泄漏,檢查一些嚴重影響性能的大對象的創建,檢查系統中什么對象最多,各種對象所占內存的大小等等
命令格式 jmap [options] pid -dump:[live,]format=b,file= --dump堆到文件,live指明是活著的對象,file指定文件名。
因為在dump:live前會進行full gc,因此不加live的堆大小要大于加live堆的大小 -finalizerinfo 打印等待回收對象的信息
-heap 打印堆總結
-histo[:live] 打印堆的對象統計,包括對象數、內存大小等等
-permstat 打印java堆perm區的classloader統計
-F 強制,在jmap -dump或jmap -histo中使用,如果pid沒有相應的回復 -J 提供jvm選項,如:-J-Xms256m
4.4.2.4 jstack
介紹 jstack用于打印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項"-J-d64",Windows的jstack使用方式只支持以下的這種方式:
jstack [-l] pid
如果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java stack和native stack的信息,從而 可以輕松地知道java程序是如何崩潰和在程序何處發生問題。另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序 的java stack和native stack的信息, 如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。
命令格式
jstack [ option ] pid
jstack [ option ] executable core
jstack [ option ] [server-id@]remote-hostname-or-IP
常用參數說明
options:
executable Java executable from which the core dump was produced.
(可能是產生core dump的java可執行程序)
core 將被打印信息的core dump文件
remote-hostname-or-IP 遠程debug服務的主機名或ip
server-id 唯一id,假如一臺主機上多個遠程debug服務
基本參數:
-F當’jstack [-l] pid’沒有相應的時候強制打印棧信息
-l長列表. 打印關于鎖的附加信息,例如屬于java.util.concurrent的ownable synchronizers列表.
-m打印java和native c/c++框架的所有棧信息.
-h | -help打印幫助信息
pid 需要被打印配置信息的java進程id,可以用jps查詢.
使用示例
4.4.2.5 JProfile
JProfile也可以監控JVM,并且以圖形化的方式進行展示,方便信息的查看及分析。具體可以參照4.1.2.4章節。
4.4.2.6 JConsole
JConsole也可以監控JVM,并且以圖形化的方式進行展示,方便信息的查看及分析。具體可以參照4.1.2.3章節。
4.5 .NET CLR
4.5.1 監控指標說明
.NET CLR是有微軟開發的一臺虛擬平臺,支持C#/C++/VB等,此虛擬平臺功能類似于JVM. .NET CLR主要功能如下:
平臺無關
跨語言集成
自動內存管理
版本控制
安全 .NET CLR Memory計數器如下:
性能計數器 說明
指標解釋
# Bytes in all Heaps(所有堆中的字節數)顯示以下計數器值的總和,此計數器指示在垃圾回收堆上分配的當前內存(以字節為單位)。
# GC Handles(GC 處理數目)顯示正在使用的垃圾回收處理的當前數目。
# Gen 0 Collections(第 2 級回收次數)顯示自應用程序啟動后第 0 級對象(即最年輕、最近分配的對象)被垃圾回收的次數。
# Gen 1 Collections(第 2 級回收次數)顯示自應用程序啟動后對第 1 級對象進行垃圾回收的次數。
# Gen 2 Collections(第 2 級回收次數)顯示自應用程序啟動后對第 2 級對象進行垃圾回收的次數。此計數器在第 2 級垃圾回收(也稱作完整垃圾回收)結束時遞增。
# Induced GC(引發的 GC 的數目)顯示由于對 GC.Collect 的顯式調用而執行的垃圾回收的峰值次數。讓垃圾回收器對其回收的頻率進行微調是切實可行的。
# of Pinned Objects(釘住的對象的數目)顯示上次垃圾回收中遇到的釘住的對象的數目。釘住的對象是垃圾回收器不能移入內存的對象。
# of Sink Blocks in use(正在使用的接收塊的數目)顯示正在使用的同步塊的當前數目。同步塊是為存儲同步信息分配的基于對象的數據結構。
# Total committed Bytes(提交字節的總數)顯示垃圾回收器當前提交的虛擬內存量(以字節為單位)。提交的內存是在磁盤頁面文件中保留的空間的物理內存。
# Total reserved Bytes(保留字節的總數)顯示垃圾回收器當前保留的虛擬內存量(以字節為單位)。保留內存是為應用程序保留(但尚未使用任何磁盤或主內存頁)的虛擬內存空間。
% Time in GC(GC 中時間的百分比)顯示自上次垃圾回收周期后執行垃圾回收所用運行時間的百分比。
Allocated Bytes/second(每秒分配的字節數)顯示每秒在垃圾回收堆上分配的字節數。
Finalization Survivors(完成時存留對象數目)顯示因正等待完成而從回收后保留下來的進行垃圾回收的對象的數目。如果這些對象保留對其他對象的引用,則那些對象也保留下來,但此計數器不對它們計數。
Gen 0 heap size(第 2 級堆大小)顯示在第 0 級中可以分配的最大字節數;它不指示在第 0 級中當前分配的字節數。
Gen 0 Promoted Bytes/Sec(從第 1 級提升的字節數/秒)顯示每秒從第 0 級提升到第 1 級的字節數。內存在從垃圾回收保留下來后被提升。
Gen 1 heap size(第 2 級堆大小)顯示第 1 級中的當前字節數;此計數器不顯示第 1 級的最大大小。
Gen 1 Promoted Bytes/Sec(從第 1 級提升的字節數/秒)顯示每秒從第 1 級提升到第 2 級的字節數。在此計數器中不包括只因正等待完成而被提升的對象。
Gen 2 heap size(第 2 級堆大小)顯示第 2 級中當前字節數。不直接在此代中分配對。
Large Object Heap size(大對象堆大小)顯示大對象堆的當前大小(以字節為單位)。垃圾回收器將大于 20 KB 的對象視作大對象并且直接在特殊堆中分配大對象;
Promoted Finalization-Memory from Gen 0(從第 1 級提升的完成內存)顯示只因等待完成而從第 0 級提升到第 1 級的內存的字節數。
Promoted Finalization-Memory from Gen 1(從第 1 級提升的完成內存)顯示只因等待完成而從第 1 級提升到第 2 級的內存的字節數。
Promoted Memory from Gen 0(從第 1 級提升的內存)顯示在垃圾回收后保留下來并且從第 0 級提升到第 1 級的內存的字節數。
Promoted Memory from Gen 1(從第 1 級提升的內存)顯示在垃圾回收后保留下來并且從第 1 級提升到第 2 級的內存的字節數。
4.5.2 監控工具
4.5.2.1 集成的性能監視器
Windows性能監視器中,可以將.NET CLR Memory中相關的計數器加入到監控中。
4.5.2.2 .NET Memory Profiler
Profiler可以調試4種類型的.NET程序,分別為:
桌面應用程序
WPF程序
ASP.NET程序
.NET Service程序 對應選擇軟件的文件菜單如下
Profler調試共有三種方式選擇:
啟動跟蹤(Profiler Application)
選定對應的調試方式,如調試桌面程序,選中Profiler Application,然后選擇需要啟動的執行文件,Profiler將作為宿主程序啟動程序開始實時監控內存.
附加進程(Attach Process)
將Profiler附加到指定的進程上,此時不能實時監控內存情況,只能夠收集內存鏡像.
導入內存鏡像(Import Memory Dump)
可以選擇dmp為后綴的內存鏡像文件,比如Windbg以及DebugDiag導出的鏡像文件,此時不能實時監控內存情況,只能夠收集內存鏡像且不能跟蹤非托管資源.
具體操作如下:
啟動程序
首先,選擇需要調試類型,選擇 Profiler Application,選擇好需要啟動的程序exe文件.
如果需要設置啟動參數,則設置好命令行參數以及工作目錄.
選擇”Next”進行收集數據的一些選項設置,一般直接按”Star”按鈕開始調試程序.
收集數據
選擇菜單欄的收集按鈕,收集堆數據,第一個為收集全部堆上的數據,第二個為只收集第0代的數據.
重新啟動和停止
調試完畢后通過停止按鈕跟蹤程序,通過啟動按鈕重新啟動上一次的調試程序.
查看收集數據
Profiler上有6個頁卡,分別為:
Type/Resource 類型/資源頁卡
Type/Resource Details類型/資源明細頁卡
Instance Details 實例明細頁卡
Call Stacks/Methods調用堆棧頁卡
Navtive Memory 本地內存頁卡
Real-Time-實時跟蹤頁卡
5 數據庫指標監控
5.1 MySQL
5.1.1 監控指標說明
主要針對SQL耗時、吞吐量(QPS/TPS)、命中率、鎖等待等指標進行監控。
5.1.2 監控工具
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 狀態量
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 鎖定狀態
鎖定狀態包括表鎖和行鎖兩種,我們可以通過系統狀態變量獲得鎖定總次數,鎖定造成其他線程等待的次數,以及鎖定等待時間信息
mysql -u root -p123456 -e 'SHOW /!50000 GLOBAL/ STATUS LIKE "%lock%"'