一、接口請求響應指標
重點關注以下幾個指標:
- 需滿足的並發數
- TPS(每秒處理事務的能力)
- 響應時間(平均響應時間、90%響應時間)
- 錯誤率
性能測試指標通過標准 |
|
需滿足的並發數 |
C = nL/T |
需滿足的TPS |
據二八原則: |
響應時間 |
根據在並發情況下的響應時間2/5/10原則,最長不能超過10s |
錯誤率 |
具體系統具體要求,一般小於萬分之一 |
緩存命中率 |
具體系統具體要求,一般大於85%通過 |
CPU占用率 |
70% 好,85% 壞,90%+ 很差 |
內存使用率 |
一般小於80%通過 |
二、服務器性能指標
重點關注以下幾個指標:
- 線程對cpu占用(關注)
- 對內存占用(關注)
- 磁盤I/O
- 網絡情況
性能項 |
資源 |
評價 |
CPU占用率 |
70% |
好 |
85% |
壞 |
|
90%+ |
很差 |
|
磁盤I/0 |
<30% |
好 |
<40% |
壞 |
|
<50%+ |
很差 |
|
網絡 |
<30%帶寬 |
好 |
運行隊列 |
<2*CPU數量 |
好 |
內存 |
沒有頁交換 |
好 |
每個CPU每秒10個頁交換 |
壞 |
|
更多的頁交換 |
很差 |
使用命令查看CPU、內存變化情況:
top -b -d 1 -p 27854 > 0904log
p是進程號 ,d是1秒收集一次,要用root用戶(sudo su -)
查看進程號 ps ef |grep acs-job 若重啟服務器后,pid會發生變化,必須重新獲取
三、SQLServer數據庫查詢慢語句(需數據庫管理員權限)
--總耗CPU最多的前20個SQL:
SELECT TOP 20
total_worker_time/1000 AS [總消耗CPU 時間(ms)],execution_count [運行次數],
qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 時間(ms)],
last_execution_time AS [最后一次執行時間],max_worker_time /1000 AS [最大執行時間(ms)],
SUBSTRING(qt.text,qs.statement_start_offset/2+1,
(CASE WHEN qs.statement_end_offset = -1
THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1)
AS [使用CPU的語法], qt.text [完整語法],
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1
ORDER BY total_worker_time DESC
--平均耗CPU最多的前20個SQL:
SELECT TOP 20
total_worker_time/1000 AS [總消耗CPU 時間(ms)],execution_count [運行次數],
qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 時間(ms)],
last_execution_time AS [最后一次執行時間],min_worker_time /1000 AS [最小執行時間(ms)],
max_worker_time /1000 AS [最大執行時間(ms)],
SUBSTRING(qt.text,qs.statement_start_offset/2+1,
(CASE WHEN qs.statement_end_offset = -1
THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1)
AS [使用CPU的語法], qt.text [完整語法],
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1
ORDER BY (qs.total_worker_time/qs.execution_count/1000) DESC
四、mysql慢查詢相關命令
-- 檢查慢查詢命令是否開啟
show variables like '%query';
-- 查看慢查詢命令
select * from mysql.slow_log;