技術分享
[技術分享]NonStop Server系統效能技術分析(中)
作者/馬先讓
作者簡歷作者擁有26年IT服務資歷,現職凌群電腦NSK服務總處副總工程師,主要負責HPE Nonstop 證券、期貨、銀行客戶交易系統維運服務,專長為HPE NonStop系統整合。
前言
HPE NonStop Server系統效能分析包含了很多面向,上一期文章針對DISK硬體環境設定、檔案屬性等效能分析進行說明,本期文章會針對系統效能分析MEASURE做詳細說明。
系統效能分析-MEASURE
- MEASURE是用來分析系統效能的子系統,它能分析以下系統元件的效能
- MEASURE針對檔案有三種Entity可分析
- DISCOPEN:分析DISK PROCESS對檔案的每一個獨立file open的I/O行為;Measure會對每一個file open產生獨立的record。
- DISKFILE:分析所有PROCESS對特定檔案的I/O行為。Measure會對該檔案產生一個record。
- FILE:分析單一PROCESS對檔案的I/O行為,可分析$RECEIVE, LINKMON $ZLnn。
我們主要使用到CPU、DISC、PROCESS、DISCOPEN等四個Entity。以下介紹MEASURE操作、啟動/停止MEASURE子系統、定時/即時收集MEASURE DATA、手動/自動分析MEASURE DATA。
一、MEASURE操作
- Online Help-HELP
MEASCOM 線上HELP 可以看command,object 和error number的HELP。 - ADD
ADD支援三種object,說明如下:
(1)ADD Entities
如:ADD CPU *; ADD PROCESS 0,*; ADD DISC *
(2)ADD Measure datafile
如:ADD MEASDATA
(3)ADD Plot
如:ADD PLOT CPU-BUSY-TIME,可以畫出PLOT,範例
LIST CPU *
ADD PLOT CPU-BUSY-TIME
LIST PLOT
LIST PLOT, TIME-BASE OFF
LIST PLOT, VERT-BASE OFF, TIME-BASE OFF
以上的方式能很快速的分析出收集的MEASURE DATA,那個時間點CPU 最忙碌。 - DELETE
DELETE支援三種object,說明如下:
(1)DELETE Entities
如:DELETE DISCOPEN $*.#*
(2)DELETE Measure datafile
如:DELETE MEASDATA
(3)DELETE Plot
如:DELETE PLOT CPU-BUSY-TIME (A),可以刪除加的PLOT
範例:DELETE PLOT CPU-BUSY-TIME (*) - DELETE
DELETE支援三種object,說明如下:
(1)DELETE Entities
如:DELETE DISCOPEN $*.#*
(2)DELETE Measure datafile
如:DELETE MEASDATA
(3)DELETE Plot
如:DELETE PLOT CPU-BUSY-TIME (A),可以刪除加的PLOT
範例:DELETE PLOT CPU-BUSY-TIME (*) - INFO
INFO支援四種object,說明如下:
(1)INFO Entities
如:ADD CPU *後再用INFO CPU * 看是否有加入
(2)INFO User-defined counters
(3)INFO Measure datafile
如:INFO MEASDATA,可以看這個MEASURE DATA收集的Entities和時間。
(4)INFO Plot
如:INFO PLOT CPU-BUSY-TIME (A) ,可以查看加入的PLOT - LIST
LIST用於看收集的MEASURE DATA內的資料,支援二種OBJECTs
(1)LIST Entities
如:LIST CPU * ; LIST DISC *;
(2)LIST Plot
如:LIST PLOT (請參考ADD的PLOT範例)
LIST Entity 有以下幾種用法:- 直接LIST ENTITY
如:LIST CPU *; LIST PROCESS $ABC - 查看某個時間點
如:LIST CPU *, FROM 9:00, TO 10:00 - 查看某個時間點後
如:LIST CPU *, FROM 9:00, FOR 1 HOURS - 依ENTITY內的欄位值查詢
如:LIST CPU *,BY CPU-BUSY-TIME(看所有CPU的內容,依CPU-BUSY-TIME值由高列到低) - 依ENTITY內的欄位值特定範圍查詢
如:LIST CPU *,IF CPU-BUSY-TIME > 10(看所有CPU的內容,當CPU-BUSY-TIME值>10才列出) - 也可以將BY和IF合用,如:LIST PROCESS *,BY CPU-BUSY-TIME,IF CPU-BUSY-TIME > 10,FORMAT BRIEF
- LIST加上REPORT 屬性,以下為REPORT常用的幾種屬性:
FORMAT
Brief: 精簡列顯示ENTITY較重要的欄位值,如LIST CPU *, FORMAT BRIEF
Normal: 顯示ENTITY所有欄位的值(預設)
Structured: 將指令要顯示ENTITY的內容寫到DDL 結構內,產生CODE 170的DATA FILE, 之後可以用ENFORM來做排序。
XML/CSV/JSON: 將要顯示ENTITY的內容轉換成XML/CSV/JSON格式,轉換出來的檔案最大為1T。
RATE
ON:顯示ENTITY的值用%表示(系統預設)
OFF:顯示ENTITY的值用數量表示
TOTALS
INCLUDE:顯示ENTITY的REPORT再加上TOTAL RECORD筆數
ONLY:顯示整個ENTITY的總合值
SUPPRESS:顯示ENTITY的REPORT(系統預設)
ZERO-VALUES
INCLUDE:顯示counter實際的值
SUPPRESS:當counter值小於0.005時就當成0或空格(系統預設)
ZERO-REPORTS
INCLUDE:當counter為0時也會顯示該筆RECORD
SUPPRESS:當counter為0時,就不顯示該筆RECORD (系統預設) - LISTALL
LISTALL的用法和LIST相同,LISTALL主要是將每個INTERVAL收集的資料都顯示,LIST則是將整個時段的資料統計後顯示。LISTALL最常用是將CPU 值LISTALL,然後就可以匯出成EXCEL,畫出CPU BUSY的圖表。 - START
START 主要是啟動以下兩個object
1.START MEASSUBSYS:啟動MEASURE SUBSYSTEM。
2.START MEASUREMENT filename:啟動MEASURE收集MEASURE DATA。
註:系統預設的MEASURE DATA 大小若不足時,可以在START MEASUREMENT後加上FILESIZE 放大MEASURE DATA FILE。 - STOP
STOP主要是停止以下兩個object
1.STOP MEASSUBSYS:停止MEASURE SUBSYSTEM。
2.START MEASUREMENT filename:停止收集MEASURE DATA FILE。
- 直接LIST ENTITY

二、啟動/停止MEASURE子系統
- 啟動MEASURE:MEASCOM START MEASSUBSYS;
停止MEASURE:MEASCOM STOP MEASSUBSYS; - 目前系統上執行的程式與檔案愈來愈多,所以在啟動MEASURE 前要放大CID,完整程序如下(通常這段會加到系統開機的START FILE,之後只要收集MEASDATA即可):
MEASCOM STOP MEASSUBSYS;
ADD DEFINE =_SET_MAX_CIDS_TO_1024K, FILE M1
MEASCOM START MEASSUBSYS;
三、定時/即時收集MEASURE DATA
- 定時收集MEASURE DATA
定時收集MEASURE程序:
步驟說明:
(1)編輯如上的TACL OBEYFILE。
(2)設定要收集MEASURE的時間,並存成不同的MEASURE DATA FILE,以及設定要收的interval 間隔時間,最低可以到1秒。
(3)執行這個OBEYFILE,當系統時間到就會自動收集那段時間的MEASURE,並產生CODE 175的檔案。
(4)如要停止某個時段的measure,指令如下:
MEASCOM STOP MEASUREMENT measdata - 即時收集MEASURE DATA
即時收集MEASURE程序:
執行方式:RUN MEASSTRT MEASDATA
即時停止MEASURE
執行方式:RUN MEASSTOP MEASDATA
檢查系統目前MEASURE啟動收集的檔案有那些,執行方式:MEASCOM STATUS MEASSUBSYS
四、手動分析MEASURE DATA
- 加入要分析的MEASURE DATA
將要分析的MEASURE DATA加入,並確認它收集的時間和項目,指令:ADD MEASDATA
INFO MEASDATA - 分析CPU
- 要分析CPU負載是否平均,不平均時要從該CPU上最忙的幾個PROCESS 去做分配調整,若忙碌的PROCESS是DISK PROCESS,就要分析DISCOPEN內最忙碌的檔案(read次數最高的幾個檔案分散至其他不忙的DISK上)。
- CPU ENTITY包含了下面幾個子系統,各子系統重要的欄位說明如下:
- CPU Subsystem
Cpu-Busy-Time:顯示該顆CPU的BUSY值。
Cpu-Qtime:顯示這段時間內Processes在ready list等待的總時間(rate off)或平均等待的時間(秒)(rate on),該值太高,表示CPU可能資源不夠。
Dispatches:顯示這段時間內Processes從ready list進入CPU處理的頻率。 - Memory Subsystem
Ending-Free-Mem:顯示該CPU剩下的記憶體
swaps:Memory Manager做程式在記憶體中SWAP的次數,若該值太高有兩個原因,一個是記憶體不足,另一個該CPU上的的程式太多transient processing。 - Disk Subsystem
Disc-IOs:顯示該顆CPU上的DISK I/O的次數頻率
Cache-Hits:顯示該顆CPU上的DISK在DISK CACHE命中的次數頻率 - 常用的指令
LIST CPU * --看全部CPU和全部CPU的欄位值
LIST CPU *, FORMAT BRIEF --看全部CPU和精簡CPU的欄位值
LIST CPU *, FROM time, TO time --看某段時間內的CPU值
- CPU Subsystem
- 分析DISC
- 主要分析DISC上DEVICE-QBUSY-TIME過高的DISK(超過15%就需要分散該DISK內WRITE/READ過重的檔案至其他不忙的DISK)
- DISC ENTITY重要的欄位說明如下:
Device-Qbusy-Time:排隊等待的時間,若該值大於15%,磁碟的效能會明顯下滑,需要分析該顆DISK內WRITE/READ過重的檔案分散至其他DISK。 - 常用的指令
LIST DISC * --看全部DISC和全部DISC的欄位值
LIST DISC *, FORMAT BRIEF --看全部DISC和精簡DISC的欄位值
LIST DISC *, FROM time , To time --看某段時間內的DISC值
- 分析PROCESS
- 主要分析每顆CPU上最忙的PROCESS是那些,好做為分散CPU上PROCESS負載的依據,若該PROCESS是DISK PROCESS,就必須再分析該DISK的DISCOPEN內那些READ/WRITE過重的檔案,將他們分散到其他DISK上。
- PROCESS ENTITY重要的欄位說明如下:
CPU-BUSY-TIME:PROCESS 執行花費的時間,愈高代表該PROCESS耗費CPU資源愈高。有些process可能是瞬間BUSY,很快就結束,所以必須要注意BUSY的PROCESS耗時佔MEASURE收集時間的比例。
RECV-QTIME:Process message 傳送等待的時間,愈高代表該process本身處理訊息傳遞能力不足,通常這個值大於2位數時,需特別注意。 - 常用的指令
LIST PROCESS * --看全部PROCESS和全部PROCESS的欄位值
LIST PROCESS *, FORMAT BRIEF --看全部PROCESS和精簡PROCESS的欄位值
LIST PROCESS *, FROM time,To time --看某段時間內的PROCESS值
LIST PROCESS *, BY CPU-BUSY-TIME, FORMAT BRIEF --依CPU-BUSY-TIME 值從大到小列出忙碌的PROCESS
LIST PROCESS *,BY RECV-QTIME,FORMAT BRIEF--依RECV-QTIME值從大到小列出忙碌的PROCESS,這個指令能快速找出系統在QUEUE的PROCESS,通常這個值太高(2位數)的PROCESS就會是卡住的瓶頸原因。
- 分析DISCOPEN
- 主要分析每顆DISK上的檔案READ/WRITE次數和CACHE READ/WRITE的次數,可找出每顆DISK忙碌的主要檔案是那些,以及有那些檔案出現LOCKWAIT TIME,發生LOCKWAIT TIME過高的檔案,要再分析是那些PROCESS造成的。
- DISCOPEN ENTITY重要的欄位說明如下:
Driver?Input?Calls:檔案做read的次數(包含在cache和沒在cache的次數)
Driver?Output?Calls:檔案做write的次數(包含在cache和沒在cache的次數)
Cache?Hits:檔案做READ時,資料能在CACHE中找到的次數。
Cache?Write?Hits:檔案做WRITE時,資料能在CACHE中找到的次數。
Block?Splits:檔案在做WRITE時發生BLOCK-SPLIT的次數,若該值太高,建議將該檔案重做RELOAD,放大SLACK到20。
Lockwait-Time:檔案花在等待LOCK的時間。
Max-Lockwait-Time:檔案被LOCK等待最長的時間。 - 常用的指令:
LIST DISCOPEN $DATA.FUDATA.FUTPAB --看該檔案的統計內容
LIST DISCOPEN $DATA.FUDATA.FUTPAB, FORMAT BRIEF --看該檔案的精簡欄位值
LIST DISCOPEN $DATA.FUDATA.FUTPAB, FROM time, To time --看該檔某段時間內的統計值
LIST DISCOPEN $*.*.*, BY Max-Lockwait-Time, FORMAT BRIEF –查全部檔案中,Max-Lockwait-Time最高的檔案
LIST DISCOPEN $*.*.*, BY Block?Splits–查全部檔案中,Block?Splits最高的檔案(這時不能加FORMAT BRIEF)
參考資料
‧Performance Analysis and Tuning for NonStop Systems
‧Measure Users Guide
‧Measure Reference Manual