第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