性能测试中性能瓶颈分析5个层面

对于一次用户不友好的操作(页面响应时间过长...),我们可以从如下几个方面对涉及该应用的不同层、不同角度对相关性能瓶颈的影响因素进行排查:

硬件瓶颈

cpu

内存

磁盘io

网络io

如果是某个硬件指标有问题,需要深入的进行分析

网络瓶颈

局域网可忽略网络因素

防火墙、动态负载均衡器、交换机等设备

带宽利用率等指标查看

服务器操作系统瓶颈

物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加

中间件瓶颈

参数配置

数据库:慢查SQL,命中率(带缓存、不带缓存等场景),锁、参数设置

tomcat配置

线程池、连接池、GC等,如果是这些指标问题,需要深入分析。

...

应用瓶颈

sql语句

数据库设计

业务逻辑

算法、缓冲、缓存、同步或异步等

...

具体参见下图

解决思路

CPU

CPU资源利用率很高的话,需要看CPU消耗User,Sys,Wait这几种状态下的具体情形:

情形1:如果CPU User非常高,需要查看消耗在哪个进程,可以用top(linux)命令看出,接着用top –H –p 看哪个线程消耗资源高

情形2:如果是java应用,就可以用jstack看出此线程正在执行的堆栈,看资源消耗在哪个方法上,查看源代码就知道问题所在;

情形3:如果是c++应用,可以用gprof性能工具进行分析。

情形4:如果CPU Sys非常高,可以用strace(linux)看系统调用的资源消耗及时间。

情形5:如果CPU Wait非常高,考虑磁盘读写了,可以通过减少日志输出、异步或换速度快的硬盘。

Memory

内存问题主要看某个进程占用内存是否非常大以及是否有大量swap(虚拟内存交换)。

磁盘I/O

磁盘I/O最显著的指标是繁忙率,可以通过减少日志输出、异步或换速度快的硬盘。

网络I/O

网络I/O主要考虑传输内容大小,不能超过硬件网络传输的最大值70%,可以通过压缩、减少内容大小、在本地设置缓存以及分多次传输等。

内核参数

内核参数一般都有默认值,这些内核参数默认值对于一般系统没问题,但是对于压力测试来说,可能运行的参数将会超过内核参数,导致系统出现问题,可以用sysctl来查看及修改。

JVM

jvm主要分析GC/FULL GC是否频繁,以及垃圾回收的时间,可以用jstat命令来查看,对于每个代大小以及GC频繁,通过jmap将内存dump,再借助工具HeapAnalyzer来分析哪地方占用的内存较高以及是否有内存泄漏可能

线程池

如果线程不够用,可以通过参数调整,增加线程;

对于线程池中的线程设置比较大的情况,还是不够用可能的原因是:某个线程被阻塞来不及释放,可能在等锁、方法耗时较长、数据库等待时间很长等原因导致,需要进一步分析才能定位。

JDBC连接池

连接池不够用的情况下,可以通过参数进行调整增加;

但是对于数据库本身处理很慢的情况下,调整没有多大的效果,需要查看数据库方面以及因代码导致连接未释放的原因。

SQL

SQL效率低下也是导致性能差的一个非常重要的原因,可以通过查看执行计划看SQL慢在哪里,一般情况,SQL效率低下原因主要有:

(1) 未建索引,会产生全表扫描

(2) 未利用索引,会产生全表扫描,具体示例如下:

substring(card_no,1,4)=′5378′产生全表扫描

amount/30< 1000产生全表扫描

convert(char(10),date,112)=′19991201′产生全表扫描

where salary<>3000产生全表扫描

name like ‘%张’产生全表扫描

first_name + last_name =’beill cliton’产生全表扫描

id_no in(′0′,′1′)产生全表扫描

select id from t where num=@num有参数也会产生全表扫描

(3) 使用效能低的索引,示例如下:

oder by 非聚族索引,索引性能低

username=’张三’ and age>20,字符串索引低于整形索引

表中列与空NULL值,索引性能低

尽量不要使用IS NULL或IS NOT NULL,索引性能低

(4) 数据量

所有数据量 select *很多列产生大量数据

select id,name表中有几百万行,产生大量数据

嵌套查询先不过滤数据,后过滤数据产生大量无用的数据

关联查询多表进行关联查询,先过滤掉小部分数据,再过滤大部分数据大量关联操作

大数据量插入一次次插入产生大量日志,消耗资源

(5) 锁

锁等待update account set banlance=100 where id=10产生表级锁,将会锁住整个表

死锁A:update a;update b;B:update b;update a;将会产生死锁

游标Cursor Open cursor,fetch;close cursor性能很低

临时表create tmp table 创建临时表产生大量日志

drop table删除临时表需要显示删除,避免系统表长时间锁定

(6) 其他

exist 代替 INselect num from a where num in(select num from b)in会逐个判断,exist有一条就结束

exist 代替select count(*)判断记录是否存在count(*)将累加计算,exist有就结束

between代替INID in(1,2,3)IN逐个判断,between是范围判断

left outer join 代替Not INselect ID from a where ID not in(select b.Mainid from b)NOT IN逐个判断,效率非常低

union all 代替unionselect ID from a union select id from b union删除重复的行,可能会在磁盘进行排序而union all只是简单的将结果并在一起

常用SQL尽量用绑定变量方法insert into A(ID) values(1)直接写SQL每次都要编译,用绑定变量的方法只编译一次,下次就可以用了

策略

日常化的内网的性能测试+定期的真实环境的业务性能测试

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容

  • 特别说明: 1、本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识...
    安易学车阅读 1,811评论 0 40
  • 一. Java基础部分.................................................
    wy_sure阅读 3,810评论 0 11
  • 转载自:https://www.cnblogs.com/easypass/archive/2010/12/08/1...
    SkTj阅读 544评论 0 1
  • 常用语句: sql/plus sqlplus 'amdocs/Amdocs.Jx.China.110#@ysdb1...
    好好学习的蜗牛阅读 3,003评论 0 0
  • 测试: http://blog.csdn.net/chenmengyi828/article/details/52...
    Miley_MOJIE阅读 879评论 0 1