隐藏老代码拖慢CPU

2024-04-06 19:44
文章标签 代码 隐藏 cpu 拖慢

本文主要是介绍隐藏老代码拖慢CPU,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一次代码优化过程中发现,A处理的速度很慢,最开始盲看代码,发现A依赖的其它所有非B依赖都不会慢,当时就疑问了。

最后将A的所有外部依赖打印耗时日志分析,分析A所有的外部非B依赖都不慢,B是内存操作,为啥会慢呢?又一次疑问?

接着将A的主要接口内存函数都打赢耗时日志,发现B不慢

现在的问题是生产慢,发现测试缓解B的内存比较的数据量和生产不一样,测试环境只有10w的级别,生产环境最多的场景有500w的水平。

于是在测试环境构造了500w的数据,这样测试环境和生产环境的一样了,再跑一次,发现测试环境的耗时和生产一样了,最后把B的内存操作代码仔细debug一看,确认是是每次A调用B做数据比较的时候,都会执行500w次循环。业务初期B的比较量可能就几百几千,一两年后可能就几万,几十万,当5年左右的时间B的比较量达到500的时候,应用才开始慢了。

总结

  1. 第一版代码编写者就可以预判这个可能是未来的瓶颈,更换算法或者实现方式,再不济写一个注释
  2. 问题排查的过程中,主管判断是第一步,然后一定要用测试数据去佐证,不能直接主管判断下结论,特别是性能分析场景
  3. 大多数慢优化场景都是分析IO,网络,内存问题,很少有几个循环比较导致CPU慢的场景,这个容易让分析者习惯性走偏,为了避免这种情况,核心的办法就是测试对比,打印耗时,这是直接准确的数据,一且都要数据说话
  4. 一般测试环境分析问题都会存在和线上环境的基线环境不一样,内存,网络,cpu,数据等不同要考虑进去,允许的情况可以测试环境构造类似的生产数据来验证分析

这篇关于隐藏老代码拖慢CPU的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880666

相关文章

Python跨文件实例化、跨文件调用及导入库示例代码

《Python跨文件实例化、跨文件调用及导入库示例代码》在Python开发过程中,经常会遇到需要在一个工程中调用另一个工程的Python文件的情况,:本文主要介绍Python跨文件实例化、跨文件调... 目录1. 核心对比表格(完整汇总)1.1 自定义模块跨文件调用汇总表1.2 第三方库使用汇总表1.3 导

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示