Off-CPU分析

这篇具有很好参考价值的文章主要介绍了Off-CPU分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

性能问题可以分为两种类型:

On-CPU:线程花时间在CPU上运行的地方;

Off-CPU:在I/O,锁,计数器,分页/交换上阻塞等待的时间

Off-CPU的分析是一种性能分析的方法,用于测量和研究Off-CPU的时间以及堆栈跟踪等上下文。它不同于CPU Profiling,后者仅当线程在On-CPU上执行时检查线程。在这里,我们的目标是阻塞和Off-CPU的时间段。如下图蓝色部分:

Off-CPU分析

Off-CPU的分析是与CPU分析相辅相成的,可以理解为这个就是100%的线程时间。此方法不同于应用程序功能阻塞的跟踪技术,因此这个方法是针对内核调度的阻塞概念。这是一种方便捕获的概念。

线程离开CPU的原因包括:I/O,锁,也有一些跟当前线程执行无关的原因包括:由于对CPU资源的高需求而导致的非自愿上下文切换和中断。不管是什么原因,如果在工作负载请求(同步代码路径)期间发生的这种情况,就会引入延迟。

在本节中,主要介绍Off-CPU时间作为指标,并总结Off-CPU的分析的技术,作为Off-CPU的示例实例。

进行Off-CPU分析的先决条件要求

Off-CPU分析要求堆栈跟踪可供跟踪器使用的,因此首先必须解决这个问题。许多应用程序都是使用 -fomit-frame-pointer gcc选项编译的,从而打破了基于帧指针的堆栈遍历。VM运行时(如动态的Java编译方法)和跟踪器在没有其他帮助的情况下可能无法找到其符号信息,从而导致堆栈跟踪仅为十六进制。当然还有其他陷阱。后续再展开。

几个相关概念的说明

1)CPU采样

许多传统的分析工具使用跨所有CPU的活动定时采样,以特定的时间间隔或速率(例如:90Hz)收集当前指令地址(Program Counter)或整个堆栈回溯跟踪的快照。这将给出正在运行的函数或堆栈跟踪计数,从而可以合理估计CPU周期是花费在哪些地方。在linux上我们可以使用perftool来对cpu进行定时采样。

Off-CPU分析

2)应用程序跟踪

在函数的enter和exit会被记录,Off-CPU也是没有记录。

Off-CPU分析

3)Off-CPU跟踪

记录的是Off-CPU的时间段

Off-CPU分析

4)Off-CPU采样

Off-CPU的时间段内的采样

Off-CPU分析

这种方法使用的是定时从未在CPU上运行的线程捕获阻塞的堆栈跟踪,同样它也可以通过墙上时间profiler:一个始终对所有线程所有时间进行采样的profiler。然后可以过滤掉On-CPU的时间,以留下Off-CPU进行分析。

系统很少使用Off-CPU采样。采用通常作为每个CPU计时器中断,然后检查当前正在运行的中断进程,生成On-CPU profile,一个Off-CPU采样器需要不同的方式工作:在每个应用程序线程中设置计时器以唤醒他们并捕获堆栈,或者让内核按一定间隔遍历所有线程并捕获其堆栈。文章来源地址https://www.toymoban.com/news/detail-431058.html

到了这里,关于Off-CPU分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript中的数据类型可以分为两类:原始类型和引用类型。

    JavaScript中的数据类型可以分为两类:原始类型和引用类型。 JavaScript中的原始类型有五种,分别是: 数字(Number):表示数字,包括整数和浮点数。 字符串(String):表示文本字符串。 布尔值(Boolean):表示逻辑上的真或假。 undefined:表示未定义的值。 null:表示空值。

    2024年01月24日
    浏览(44)
  • MyBatis XML 映射文件中的 SQL 语句可以分为动态语句和静态语句

    目录 静态查询: 动态查询: 静态更新: 动态更新: 静态删除: 动态删除: 动态语句和静态语句在 MyBatis 中的作用如下: 静态查询: 静态查询是指在 SQL 语句中执行固定的查询操作,查询的条件和内容是预先确定的,不会随着用户输入或其他条件的改变而改变。以下是一

    2024年01月18日
    浏览(66)
  • 【性能优化】CPU利用率飙高与内存飙高问题

    📫作者简介: 小明java问道之路 , 2022年度博客之星全国TOP3 ,专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化,文章内容兼具广度、深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。          📫 热衷分享,喜欢原

    2024年02月05日
    浏览(55)
  • 功能测试也可以发现数据库相关的性能问题

    很多同学认为功能测试和性能测试是严格分开的,功能测试人员无法发现性能问题。其实不是这样的,功能测试人员在验证功能时也可以发现性能问题;一些功能反而在功能测试环境不好验证,需要在性能环境上测试。     今天咱们就说一下测试涉及数据库操作的功能时如何

    2024年02月14日
    浏览(48)
  • 七彩虹@电脑cpu频率上不去问题@控制中心性能模式cpu频率上不去@代理服务器超时@账户同步设置失败

    问题描述,标压处理器的笔记本,cpu频率上不去 如果cpu没问题的话,就应该是系统限制了功耗导致的 有的笔记本有控制中心,里面提供了性能模式(野兽模式),均衡模式,节能模式,安静模式等 但这些软件之上有系统自带的电源管理模块,比如windows11自带的电源计划 系统设置了节能模

    2024年03月12日
    浏览(109)
  • librdkafka的rdk:broker-1线程cpu百分百问题分析

    问题调用栈: 相关代码(rd_kafka_q_pop): 通过 gdb 观察到 timeout_ms 值为 1,也就是 1 毫秒,这是导致 cpu 百分百的原因: 继续跟踪,问题发生在函数 cnd_timedwait_abs: 函数 cnd_timedwait_abs 源码: 底层调用的是 Posix 的 pthread_cond_timedwait 函数: 函数 pthread_cond_timedwait 的参数 abstime

    2024年02月16日
    浏览(29)
  • Linux系统中CPU占用率过高问题原因分析

    背景: 在服务器上部署了一个项目,发现项目部署完成之后,CPU占用率居高不下,现将原因分析过程总结如下: 通过top命令查看CPU占用率,分析CPU占用过高的原因 步骤一: 通过top命令,查看占用CPU高的进程ID 步骤二: 找到占用CPU高的进程ID(这里的进程ID是14288)之后,查看是

    2024年02月10日
    浏览(44)
  • IDEA内存设置,性能优化告别卡顿(JetBrains系列的产品都可以通过这种设置来解决卡顿的问题)

    我们在日常使用时,会出现卡顿的状况,而自己的电脑配置不是很低,这是因为IDEA安装的时候就设置了默认的内存使用上限(通常很小) 以自己的电脑为例,IDEA分配的只有1024MB(1GB),因此会出现卡顿的状况,下面我们进行修改内存。 一、首先我们查看自己电脑IDEA的内存

    2024年02月16日
    浏览(48)
  • 【linux 多线程并发】线程本地数据存储的两种方式,每个线程可以有同名全局私有数据,以及两种方式的性能分析

    ​ 专栏内容 : 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的情况下对故障容灾的支持。 手写数据库toadb 本专栏主要介绍如何从零开发,开发的

    2024年02月03日
    浏览(45)
  • Back-off restarting failed container 问题解决

    问题: 通过yaml文件创建pod时,执行完yaml文件,过一会就开始报错说 Back-off restarting failed container 。 查看pod状态一致处于 CrashLoopBackOff 原理: Back-off restarting failed container的Warning事件,一般是由于通过指定的镜像启动容器后,容器内部没有常驻进程,导致容器启动成功后即退

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包