性能测试关注指标

一、接口请求响应指标

重点关注以下几个指标:

  • 需满足的并发数
  • TPS(每秒处理事务的能力)
  • 响应时间(平均响应时间、90%响应时间)
  • 错误率

性能测试指标通过标准

需满足的并发数
(举例:每天8W用户访问,平均在线时长10分钟,1天用户24小时内使用系统)
C = 80000 * 0.166/24=553
注:0.166为10/60得出

C = nL/T
C^= C + 3*根号C 
其中C为平均并发用户数,n为login session的数量,L是login session的平均长度,T是值考察的时间长度
C^为并发用户数峰值

需满足的TPS
TPS = (80000*80%)/(20%*8*60*60)=11/sec

据二八原则:
20%常用时间,满足80%业务量
TPS = n*80%/(20%*活跃时间*60*60)
注:活跃时间一般为8小时

响应时间

根据在并发情况下的响应时间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;

 
posted @ 2020-09-16 22:21  优雅de宇  阅读(2125)  评论(0编辑  收藏  举报