zoukankan      html  css  js  c++  java
  • 记一次CPU百分百的问题

    服务拆分迁移,但是拆分后的子服务,会有一台机器CPU 飙100%,持续一下就没了。

    背景

    一个定时任务服务,由于定时任务属于边缘业务,各业务线发展拆分时,一直没有动这个服务。 最近这个服务改动太过频繁,太多业务在一个服务上,今天这个上线,明天那个上线。

    那就拆吧,各个业务线自己拎走自己的业务。

    其中一个2B 业务线的定时任务,在拆分后,会有一台服务器CPU 飙100%。

    问题表象

    一个凌晨的定时任务,会对所有企业客户做一次一天内的数据统计。

    然后这个任务在执行时,就会有 CPU 飙100%。

    问题排查

    一) 查监控

    查了下监控,在 CPU 飙高时,是 java 线程飙起来的。

    此时没有 YGC 和 FGC。没有系统异常。

    排队服务问题

    二)看代码

    任务流程比较长,长期打补丁的操作,使任务的性能比较低。

    都是一些比较频繁的计算动作。典型的 CPU 密集型服务。

    更要命的是,任务中有多处递归调用。还有几处的嵌套递归调用。

    这玩意,CPU 不高才怪。

    三)为啥没拆之前没会飙高呢?

    没拆之前,各业务线在同一上服务上,服务扩容最后有10台服务器。拆分后这个业务上只拿到2台服务器。

    线上数百家的企业客户,由10台变2台。处理是有点费劲。

    问题一下子明了了。

    根本问题

    一)代码写的不好 ,很需要优化。但逻辑又臭又长,一时没人下得了手。

    二)由10台服务器一下子降到2台。任务略有压力

    解决

    好在是定时任务,没有时效要求。

    当前服务器 CPU 是 4 核 4 线程。任务线程池的线程数降到2 。

    2个线程打爆了也只占50% 。

    任务时间由原来的20分钟,延长到了2小时。

    根本解决

    还得从代码上根本解决,任务拆分,结构化计算逻辑。

    去掉递归调用。

    服务器压力还是有的 。后面还抗不往就得加机器了。

    总结

    历史包袱啊。。。 唉!只能说每个人尽量自觉些,写代码用点心。

  • 相关阅读:
    python学习笔记之---面向对象的三大特性
    python学习笔记之---类的属性和方法的访问总结
    python学习笔记之--类的三种方法
    python学习笔记之--面向对象技术
    python学习笔记之--面向对象和面向过程
    整数反转
    逻辑运算&map函数&filter函数&reduce函数
    python整理&&集合学习
    python基本数据类型
    python基础&条件语句
  • 原文地址:https://www.cnblogs.com/ElEGenT/p/12708731.html
Copyright © 2011-2022 走看看