AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

发现隐藏在互联网架构冰山下的性能问题 by 廖雄杰@听云

发布者 performance
发布于 1445562297583  浏览 6887 关键词 架构, MySQL 
分享到

第1页

维多利亚的秘密 — 发现隐藏在互联网架构冰山下的性能问题

演讲人:廖雄杰



第2页

互联网架构下的性能问题 互联网架构下的性能发现 应用性能分析与优化



第3页

互联网架构下的性能问题



第4页

“悦耳”的运维警报响起!!!



第5页

前端响应缓慢 用户开始投诉



第6页

应用前端响应缓慢



用户开始投诉



第7页

怎么办? 穿上滑板鞋,各种查监控!!!



第8页

• 应用系统:CPU/内存使用正常!日志无异常! • 缓存:QPS、命中率正常! • 数据库:CPU、IO正常!无明显慢查询!



第9页

怎么办??

打电话给可敬又可爱的程序猿哥哥…吧

运维:喂!兄弟! 程序猿:什么事,兄弟?系统又出问题了? 运维:是啊,可以帮忙加几行调试日志吗? 程序猿:好(Zhe)的(Jiao),没(Shen)问(Me)题(Shi)!



第10页

10分钟过去了。

半小时过去了。。

1小时过去了。。。



第11页

一定是哥查问题的姿势不对!!!



第12页

复杂的技术架构

关系型数据库

分布式缓存



分布式架构 云服务

远程调用 NoSQL



第13页

庞杂的监控指标(此处省略100项……)

1 CPU/内存/IO 2 网络延时 3 数据库响应 4 缓存命中率



第14页

谁是导致应用性能问题的元凶?



第15页

它真的影响到了应用性能吗?



第16页

自下而上?OR 自上而下? 姿势很重要!



第17页

用户、应用、性能之间的关系就像……

性能



应用



用户



第18页

那么问题来了,如何与应用关联?



第19页

互联网架构下的性能发现



第20页

互联网架构下的性能发现

APM

(Application Performance Management)

深入应用代码的性能监控 帮助我们自上而下地发现性能问题



第21页

互联网架构下的性能发现

3.上报指标名及性能 4.上报异常



1.获取方法开始时间 2.获取方法完成时间,并计算执行时间



第22页

自动嵌入监控代码!



第23页

互联网架构下的性能发现

Agent 嵌码技术

Java

Bytecode/Instrumentation/Classloader

PHP

Opcode/Zend/Extensions/Xhprof

iOS

Hook/Swizzle

Android

Dalvik/Class rewriting



第24页

哪些地方需要嵌码?



第25页

互联网架构下的性能发现

原则

• 最少嵌入! • 只在必要的地方嵌码!



必要

• 可能形成性能瓶颈,嵌码! • 可能诱发其它性能问题,嵌码!



第26页

关键嵌码位置



HTTP请求 MySQL/Oracle

Redis/Memcached MongoDB/Cassandra MQ

Web Service/RPC 第三方服务



第27页

自上而下的性能发现



第28页

互联网架构下的性能问题

 MySQL slowlog

mysql> set global slow_query_log='on';



第29页

互联网架构下的性能问题

 MySQL slowlog



第30页

SQL性能分析:User/SELECT最长



第31页

SQL性能分析: User/SELECT



第32页

慢SQL追踪-User/SELECT



rows条数过多



第33页

慢SQL追踪-优化建议

SQL: SELECT id from user WHERE status in (?,?,-?) ORDER BY createTime DESC LIMIT ?,?

优化: 1. 单纯从DBA的角度优化很困难 2. 建议应用层配合,where中增加

createTime条件



第34页

应用性能分析与优化



第35页

移动端性能报告

用户的期望是移动平台的速度能和PC上一样快 如果页面在3秒内打不开,40%的用户选择离开

摘自:11 Reasons to Care About Mobile Performance in 2015



第36页

应用性能分析



第37页

应用性能分析:CI/snsforrob/batch_mark耗时百分比达到 21%



第38页

应用性能分析:慢应用过程追踪



第39页

应用性能分析:慢应用过程追踪

从追踪详情可查看详细的代码调用堆栈,通过 堆栈分析,可获取调用mysql_query的代码在 /var/www/xxx.com/www/htdocs/application/co ntrollers/yxxsn/test.php文件的第472行 CI_DB_driver.query方法中



第40页

End



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。