CPU消耗,跟踪定位理论与实践

一.性能指标之资源指标定位方案

1、打tprof报告方法

抓取perfpmr文件 60秒。

perfpmr.sh 60

从结果文件中取出tprof.sum

或直接抓取tprof

tprof –uskejzlt –x sleep 60

2、分析思路

首先看是Kernel、User、Shared
Library中的那个方面占比消耗高。例如,如果是share
lib占比比较高,则找到对应的share
lib分页,查看具体哪个lib占用CPU高,再查看这个特定的lib中哪个函数占用CPU高。

如果通过以上方法不能定位到一个应用层的函数,而是定位到消耗CPU最高的是个系统函数。不但不认识这个系统函数,也看不出谁调用了这个系统函数,因为一些系统层的函数是通用函数(比如h_cede_end_point),从这类函数并不能看出是谁在调用。这种情况,可以通过这个系统函数相邻的那些能看懂的函数来猜测,因为占用CPU高的函数往往是同一个应用、同一个模块、同一类系统调用导致,他们具有扎堆出现的特点。

如果是kernal->lock占 2~3%
cpu就是很多了。

如果定位到一个进程有问题,可以用Truss
–c –p pid查看一个进程在干什么,比如,是在做fork,还是文件读写。

  1. 示例



二.理论分析,到底谁在消耗cpu?

用户+系统+IO等待+软硬中断+空闲


祸首是谁?

用户

用户空间CPU消耗,各种逻辑运算

正在进行大量tps

函数/排序/类型转化/逻辑IO访问…

用户空间消耗大量cpu,产生的系统调用是什么?那些函数使用了cpu周期?

IO等待

等待IO请求的完成

此时CPU实际上空闲

如vmstat中的wa 很高。但IO等待增加,wa也不一定会上升(请求I/O后等待响应,但进程从核上移开了)

产生影响

用户和IO等待消耗了大部分cpu

吞吐量下降(tps)

查询响应时间增加

慢查询数增加

对mysql的并发陡增,也会产生上诉影响

三.如何减少CPU消耗?

减少等待

减少IO量

SQL/index,使用合适的索引减少扫描的行数(需平衡索引的正收益和维护开销,空间换时间)

提升IO处理能力

加cache/加磁盘/SSD

减少计算

减少逻辑运算量

避免使用函数,将运算转移至易扩展的应用服务器中 如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数

减少排序,利用索引取得有序数据或避免不必要排序 如union
all代替 union,order by 索引字段等

禁止类型转换,使用合适类型并保证传入参数类型与数据库字段类型绝对一致 如数字用tiny/int/bigint等,必需转换的在传入数据库之前在应用中转好

简单类型,尽量避免复杂类型,降低由于复杂类型带来的附加运算。更小的数据类型占用更少的磁盘、内存、cpu缓存和cpu周期

减少逻辑IO量

index,优化索引,减少不必要的表扫描 如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等

table,合理拆分,适度冗余
如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”

SQL,调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他操作 如减少复杂join,减少order by,尽量union all,避免子查询等

数据类型,够用就好,减少不必要使用大字段 如tinyint够用就别总是int,int够用也别老bigint,date够用也别总是timestamp

减少query请求量(非数据库本身)

适当缓存,降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存 如用户信息,商品信息等

·
优化实现,尽量去除不必要的重复请求 如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等

·
合理需求,评估需求产出比,对产出比极端底下的需求合理去除

升级cpu若经过减少计算和减少等待后还不能满足需求,cpu利用率还高T_T 是时候拿出最后的杀手锏了,升级cpu,是选择更快的cpu还是更多的cpu了?

低延迟(快速响应),需要更快的cpu(每个查询只能使用一个cpu)

·
高吞吐,同时运行很多查询语句,能从多个cpu处理查询中收益

CPU消耗,跟踪定位理论与实践相关推荐

  1. RoboCup中的机器人自主定位——从理论到实践(三):粒子滤波器

    最近虽然闲在家中,但是要开始做毕业设计了,每天光是读论文就花去了大量的时间,因此这个系列更的有点慢,不过我一定会抽空写完的,也算是为以后找工作问项目经历提前做点准备. 我们继续本节的内容~ 上一次在R ...

  2. Java 理论与实践: 垃圾收集简史

    垃圾收集的好处是无可争辩的 ―― 可靠性提高.使内存管理与类接口设计分离,并使开发者减少了跟踪内存管理错误的时间.著名的悬空指针和内存泄漏问题在 Java 程序中再也不会发生了(Java 程序可能会出 ...

  3. 计算机应用技术学科定位,高职院校计算机应用专业的内涵定位研究及实践.pdf...

    高职院校计算机应用专业的内涵定位研究及实践 VOCATIONAL TECHNOLOGY职业 教改探讨 技术 高职院校计算机应用专业 的内涵定位研究及实践 广东 孙宏伟 孙湧 [摘 要]针对深圳产业发展 ...

  4. 艾伟:WCF从理论到实践(11)-异步

    本系列文章导航 WCF从理论到实践(1):揭开神秘面纱 WCF从理论到实践(2):决战紫禁之巅 WCF从理论到实践(3):八号当铺之黑色契约 WCF从理论到实践(4):路在何方 WCF从理论到实践(5 ...

  5. 调试寄存器(debug registers, DRx)理论及实践

    导读: 标 题:DRx寄存器的使用(待续) (4千字) 发信人:hume   时 间:2003-06-18 17:33:11 详细信息: 调试寄存器(DRx)理论与实践 By Hume/冷雨飘心 前言 ...

  6. tensorflow 语义slam_研究《视觉SLAM十四讲从理论到实践第2版》PDF代码+《OpenCV+TensorFlow深度学习与计算机视觉实战》PDF代码笔记...

    我们知道随着人工神经网络和深度学习的发展,通过模拟视觉所构建的卷积神经网络模型在图像识别和分类上取得了非常好的效果,借助于深度学习技术的发展,使用人工智能去处理常规劳动,理解语音语义,帮助医学诊断和支 ...

  7. 微服务理论与实践[1]-什么是微服务

    微服务理论与实践[1]-什么是微服务 什么是微服务 微服务 (Microservices) 是一种软件架构风格,将应用程序构造为围绕业务的小型自治服务的集合 微服务以专注于单一责任与功能的小型功能区块 ...

  8. 性能优化:一个 Flink 参数节省了 50% 的 CPU 消耗

    本文属于 Flink 在生产环境的大规模 CPU 优化实战,大并发任务预计节省 30~50% 的 CPU 消耗.下文会详细分析优化相关的实现原理.问题定位以及优化过程.往往在做性能优化时就会发现:当已 ...

  9. 《ROS理论与实践》学习笔记(九)机器人自主导航

    <ROS理论与实践>学习笔记(九)机器人自主导航 课程内容 ROS中的导航框架 导航框架中的关键功能包 move_base amcl 机器人自主导航案例 导航仿真 程序接口 move_ba ...

最新文章

  1. 【Qt】Qt再学习(十五):关于paintEvent、QPainter学习这一个demo就够了
  2. MyEclipse6.0注册码算法代码,MyEclipse7.0注册码算法代码
  3. 注定一爆就完的ZAO ,为什么只是一剂社交毒药?
  4. mongoDB 从单节点迁移到分布式集群 遇到的问题
  5. faster rcnn训练过程讲解
  6. 谈谈遵守公司作战纪律
  7. 跟ArthurXF学从雅虎抓取股票数据的方法
  8. c#怎么拟合函数得到参数_c#怎么拟合函数得到参数_最小二乘法拟合任意次曲线(C#)...
  9. PHP+MySQL实现新闻管理系统
  10. 23 种设计模式的分类 - Design Patterns
  11. mantis最正确的安装步骤详解,不能实现你找我
  12. 用html计算长方形的面积公式,【长方形正方形的面积计算公式】《长方形、正方形的面积计算》优秀教学反思...
  13. html可以播放所有本地视频播放器,VR播放器有哪些 能播放本地视频的VR播放器推荐...
  14. 机器学习中的矩阵向量求导(五) 矩阵对矩阵的求导
  15. 做自媒体视频剪辑怎么赚钱呢?
  16. 关于WPF中平移缩放问题的解决
  17. Ps Camera Raw 打开图像错位花屏原因- PC 上的独立显卡背锅
  18. 最全软件测试面试题(经典)
  19. python 矩阵 将所有列向量合并成一个向量 将虚数矩阵转化为实数矩阵
  20. 福建省区块链应用商会成立大会 发起单位零伽壹现场做主题分享

热门文章

  1. 2022-2028年中国磷肥工业投资分析及前景预测报告
  2. lightgbm 决策树 可视化 graphviz
  3. 比Momentum更快:揭开Nesterov Accelerated Gradient的真面目NAG 梯度下降
  4. GloVe:另一种Word Embedding方法
  5. pytorch系列 -- 9 pytorch nn.init 中实现的初始化函数 uniform, normal, const, Xavier, He initialization...
  6. LeetCode简单题之数组拆分 I
  7. 激光雷达与汽车技术路线
  8. 使用Servlet完成单表的CRUD
  9. 2021年大数据Spark(四):三种常见的运行模式
  10. Python 获取list 中指定元素出现的次数