0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

线上机器CPU占用高分析实践

京东云 来源:京东零售 王江波 作者:京东零售 王江波 2025-02-18 14:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:京东零售 王江波

1. 线程运行状态

1.1 total

wKgZO2e0K4iAUWSmAAPq2vdj1K0085.png



1.2 timed_waiting

wKgZPGe0K4mAXzE4AAMUL7ckbRY633.png



wKgZO2e0K4qAKhnsAAEfBtxpT6g700.png



通过上图我们可以发现timed_waiting的topN线程都是查询国补资质的。

1.3 waiting

wKgZPGe0K4uAEqx2AAIxDoYW2JQ568.png



wKgZO2e0K4uAEslDAALKeLlm70w870.png



通过上图我们可以发现waiting的topN线程都是查询国补活动的。

1.4 线程分析

下面我们分析上述两种状态:

1. WAITING 状态

定义:当一个线程处于 WAITING 状态时,它在等待另一个线程的特定操作(如通知或中断),并且不会继续执行。

触发条件:线程进入 WAITING 状态的常见情况包括:

调用 Object.wait() 方法:线程在等待某个对象的监视器(锁)被其他线程通知。

调用 Thread.join() 方法:等待另一个线程完成。

调用 LockSupport.park() 方法:线程被阻塞,直到它被其他线程唤醒。

恢复:线程在 WAITING 状态下将一直保持此状态,直到其他线程调用 notify() 或 notifyAll()(对于 Object.wait()),或者被中断。

2. TIMED_WAITING 状态

定义:当一个线程处于 TIMED_WAITING 状态时,它在等待某个条件的发生,但它会在指定的时间后自动返回。

触发条件:线程进入 TIMED_WAITING 状态的常见情况包括:

调用 Thread.sleep(milliseconds):线程休眠指定的毫秒数。

调用 Object.wait(milliseconds):线程在等待某个对象的监视器(锁),并且在指定的时间内等待。

调用 Thread.join(milliseconds):等待另一个线程完成,但有时间限制。

调用 LockSupport.parkNanos() 或 LockSupport.parkUntil()。

恢复:线程在 TIMED_WAITING 状态下会在指定的时间结束后自动恢复,或者在其他线程调用 notify() 或 notifyAll() 时恢复。

| 状态           | 描述                                     | 触发条件                                    | 恢复方式                                   |
|----------------|------------------------------------------|---------------------------------------------|--------------------------------------------|
| **WAITING**    | 线程等待另一个线程的特定操作,不会继续执行 | `Object.wait()`, `Thread.join()`, `LockSupport.park()` | 其他线程调用 `notify()`/`notifyAll()` 或被中断 |
| **TIMED_WAITING** | 线程等待某个条件的发生,但有时间限制   | `Thread.sleep(milliseconds)`, `Object.wait(milliseconds)`, `Thread.join(milliseconds)` | 超过指定时间后自动恢复,或其他线程调用 `notify()`/`notifyAll()` |

下面我们结合实际代码情况分析:

wKgZPGe0K42ALX4tAAPnywM_5ZI317.png



上文中 queryActTp 为 getActivityInfo 执行并发任务,其中包含两个子任务、 queryQualityTp 为 getQualityInfo 执行并发任务,其中五个子任务。同时将这俩任务放到queryActAndQualityTp中并行。

getActivityInfo所在的秒级监控如下:

wKgZO2e0K46AE1-PAAIoNZXJJLE768.png



getQualityInfo所在的秒级监控如下;

wKgZPGe0K4-AT78sAALfDAaj9hY787.png



上文中同样的调用方式,但是出现了两种线程状态,理论上应该都是TIMED_WAITING。针对queryActTp我们可以发现堆栈信息中也是LockSupport.park而不是LockSupport.parkNanos。具体原因有待进一步分析。

上述代码中还有一个问题就是A线程池中又并行调用了B、C线程池,在大流量情况下,CPU频繁切换也会造成一定的CPU压力,我们改写这块逻辑用一个线程池实现活动和资质的并发查询。鉴于改动较大,本次先不动。

2. 火焰图分析

wKgZO2e0K5CADIzrAAFlIjl_MMk997.png



2.1 wait线程

wKgZPGe0K5KAbzQ4AAS-vXOvmLQ104.png



2.2 锁性能

wKgZO2e0K5OAbT9fAABVTv8WRRg556.png



2.3 CPU采样

wKgZPGe0K5SAEN51AAVJrQt6tI8976.png



2.3.1 getFatherActivity分析

wKgZO2e0K5WAJnlpAASFE89Jb-A955.png



Q1:调用场景:循环中调用getFatherActivity

Q2:查看配置数据,json格式化后50000字符,大对象的反序列化

Q3:使用new ArrayList() 创建新对象

Q4:分组后只用了对象中的第一个元素,这里用toMap更佳

优化1:

wKgZPGe0K5aAKN8XAAJwzhk-DqE043.png



我们可以发现上文在循环中还是会存在多次的stream调用,继而将toMap逻辑提到循环外,如下:

wKgZO2e0K5iAJn0PAASLwbZPUT8987.png



其他方法确实占用CPU较高,这里先不处理。

下文再优化一项获取并发线程执行结果的工具类:

wKgZPGe0K5qAe7g2AAkqVb6pW3o510.png



1、 allOf异常后,取消所有线程的继续执行。这么做为了防止有些线程超时后仍在执行,浪费部分CPU资源,线上发现确实存在较多的超时情况。
2、 这里的异常日志较多,根据异常类型进行区分,去掉没用的堆栈日志。

并发线程中所有的等待统一都使用了上文的方法,前文中的queryActTp处于WAITING状态可能也是执行没取消导致,修改部署后再观察分析。同样的调用方式 queryQualityTp 处于Timed_waiting状态可能与一次父任务中子任务的执行耗时有关,见上文监控,活动和资质相差较大,具体原因有待进一步分析。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11331

    浏览量

    225910
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    共聚焦显微技术在高分子科学中的应用与实践

    研究高分子材料的微观结构,传统方法面临一个永恒的困境:要看到内部,就得破坏样品;要保持样品完整,就只能观察表面。如今已跨越学科边界,成为高分子材料工业研发的重要工具。共聚焦显微镜凭借更高的检测
    的头像 发表于 04-02 18:16 109次阅读
    共聚焦显微技术在<b class='flag-5'>高分</b>子科学中的应用与<b class='flag-5'>实践</b>

    基于Arm架构服务器释放更高CPU利用率

    在大型云服务提供商的数据中心中,CPU 利用率长期偏低,造成了大量资源闲置。根据 CAST AI 的分析,超过 1,000 个 CPU 的大型集群平均占用率仅约 17%[1],不同云服
    的头像 发表于 03-24 10:19 529次阅读

    Linux性能分析实战:用trace揪出卡顿、高CPU的“真凶”

    做 Linux 开发或运维的你,是否常被这些问题困扰:服务突然卡顿却找不到根源,CPU 占用率飙升但查不到 “罪魁祸首”,系统响应变慢却摸不清瓶颈?其实,Linux 内核早已为我们准备了 “透视镜”——trace 跟踪技术,今天就手把手教你从生成 trace 文件到可视化
    的头像 发表于 02-03 15:24 618次阅读
    Linux性能<b class='flag-5'>分析</b>实战:用trace揪出卡顿、高<b class='flag-5'>CPU</b>的“真凶”

    机器视觉网卡的全面选型指南

    选择适合的机器视觉网卡,不能只看“千兆”还是“万兆”,更需要结合相机类型、传输距离、CPU资源占用以及工业环境来综合考量,尤其在高分辨率、高帧率视觉应用日益普及的当下,网卡的稳定性直接
    的头像 发表于 01-08 16:35 415次阅读
    <b class='flag-5'>机器</b>视觉网卡的全面选型指南

    低 ESR 突破 3mΩ:固态叠层高分子电容在车载 DC-DC 的应用实践

    MLCC与液态电容的核心方案。 以下从技术特性、应用场景、性能优化及行业实践四个维度展开分析:    一、低ESR特性:突破3mΩ的技术优势 能量损耗降低 MLPC采用导电高分子电解质(如PEDOT)与纳米级导电层技术,ESR可
    的头像 发表于 11-22 08:50 1290次阅读
    低 ESR 突破 3mΩ:固态叠层<b class='flag-5'>高分</b>子电容在车载 DC-DC 的应用<b class='flag-5'>实践</b>

    时钟周期、机器周期、指令周期介绍

    执行操作,以时钟作为驱动完成每一步。因此时钟周期决定了计算机的工作节奏,进而影响到计算机工作速度。 机器周期:通常用从内存中读取一个指令字的最短时间来规定CPU周期(机器周期),也即CPU
    发表于 11-17 07:54

    在英伟达Thor平台部署EtherCAT主站:实测高性能、低抖动与低占用

    基础。通过部署acontisEC-Master主站协议栈,并结合实时内核与优化驱动,我们在JetsonThor上实现了低抖动、低CPU占用的EtherCAT通信性
    的头像 发表于 10-31 15:38 745次阅读
    在英伟达Thor平台部署EtherCAT主站:实测高性能、低抖动与低<b class='flag-5'>占用</b>

    在英伟达Thor平台部署EtherCAT主站:实测高性能、低抖动与低占用

    基础。通过部署acontisEC-Master主站协议栈,并结合实时内核与优化驱动,我们在JetsonThor上实现了低抖动、低CPU占用的EtherCAT通信性
    的头像 发表于 10-31 09:24 25次阅读
    在英伟达Thor平台部署EtherCAT主站:实测高性能、低抖动与低<b class='flag-5'>占用</b>

    在高性能 AI 平台上部署 EtherCAT 主站:实测低抖动、低占用方案

    基础。通过部署acontisEC-Master主站协议栈,并结合实时内核与优化驱动,我们在JetsonThor上实现了低抖动、低CPU占用的EtherCAT通信性
    的头像 发表于 10-30 15:35 699次阅读
    在高性能 AI 平台上部署 EtherCAT 主站:实测低抖动、低<b class='flag-5'>占用</b>方案

    RK3576机器人核心:三屏异显+八路摄像头,重塑机器人交互与感知

    瑞芯微RK3576 AIoT处理器处理器凭借其卓越的多屏异显与8路摄像头接入能力,为机器人领域带来革新。米尔电子MYD-LR3576开发板实测数据显示,在高负载下CPU占用仅34%,完美实现多路视觉
    发表于 10-29 16:41

    小批量SMT打样上机费,是“乱收费”还是“必要成本”?

    一站式PCBA加工厂家今天为大家讲讲为什么小批量SMT打样收取上机费?小批量SMT打样中上机费的价值。小批量SMT打样中收取上机费是必要的,其价值主要体现在设备调试与固定成本分摊、工艺调整与质量
    的头像 发表于 10-21 09:08 670次阅读

    单核CPU网关和双核CPU网关有什么区别

    单核CPU网关与双核CPU网关的核心区别在于处理能力、多任务效率、性能表现及适用场景,双核CPU网关在多任务处理、复杂计算和响应速度上具有显著优势,而单核CPU网关则更适合轻量级、低负
    的头像 发表于 07-05 14:37 1319次阅读

    热重分析仪在高分子材料中的应用

    高分子材料以其轻质、高强度、耐腐蚀等特性广泛应用于工业、医疗、电子等领域。然而,其热稳定性直接影响加工性能、使用寿命及安全性。热重分析仪作为一种表征材料热性能的关键仪器,能够精准测定高分子材料在升温
    的头像 发表于 05-27 14:19 531次阅读
    热重<b class='flag-5'>分析</b>仪在<b class='flag-5'>高分</b>子材料中的应用

    【「# ROS 2智能机器人开发实践」阅读体验】视觉实现的基础算法的应用

    : 一、机器人视觉:从理论到实践 第7章详细介绍了ROS2在机器视觉领域的应用,涵盖了相机标定、OpenCV集成、视觉巡线、二维码识别以及深度学习目标检测等内容。通过学习,我认识到: 相机标定的重要性
    发表于 05-03 19:41

    【「# ROS 2智能机器人开发实践」阅读体验】机器人入门的引路书

    ROS的全称:Robot Operating System 机器人操作系统 ROS的 目的 :ROS支持通用库,是通信总线,协调多个传感器 为了解决机器人里各厂商模块不通用的问题,让机器人快速开发
    发表于 04-30 01:05