kafka消息堆积且CPU过高代码优化

直接部署已有的代码程序到线上服务器,发现CPU立马升高500%左右,立马停掉服务并看源代码排查问题,翻看代码,发现通过多线程消费
kafka消息,根据对多线程的了解,立马从以下方面排查问题:
 1.多线程必须保证单例模式,才能保证多线程安全问题
 2.共享资源的竞争问题,有共享变量必须加锁(synchronized)同步
 3.代码性能优化(jvm和数据库两个方面进行优化)

逐个分析排查:
 对于第一个线程安全问题,开启多个线程来分别获取单例,然后打印它们所获取到的单例的hashCode值。
 若它们获取的单例是相同的(该单例模式的实现是线程安全的),那么它们的hashCode值一定完全一致;若它们的hashCode值不完全一致,
 那么获取的单例必定不是同一个,即该单例模式的实现不是线程安全的,是多例的。通过本地测试打印发现hashCode值不一样,立马修改代码,
 我使用内部类实现线程安全的懒汉式单例,这种方式是一种效率比较高的做法(注意:使用双重检测同步延迟加载去创建单例的做法是一个非常优秀的做法,
 其不但保证了单例,而且切实提高了程序运行效率)。

保证单例模式代码截图:

对于第二个资源共享的问题,有成员变量的可以通过加volatile关键字,变量的可见性。

对于第三个代码性能问题解决思路:

数据库层面:单条数据插入耗资源,每次插入数据都会预编译一次,可以改成批量插入。

jvm层面:在知道集合大小的情况下可以给集合一个初始化大小,避免多次扩容好资源。内存模型

初次优化后部署到线上,发现CPU在100%左右,CPU有所下降,但是还是偏高,继续二次优化。

第二次优化,我直接本地直接注释掉判断经纬度是否边界区域那部分代码(判断代码见下图),for循环是每次都要Double.parseDouble()方法转换耗时,有个时间复杂度,找到问题点,
代码性能不足,经过请教后,将for循环中的代码double转换在外面直接处理好,for循环直接get取值就是double类型。

优化前代码截图:

优化后代码截图:

二次线上部署,发现CPU在30%左右,达到目标期望。

总结:用到了kafka技术和多线程,由于对kafka不是很了解,仅从多线程及jvm和数据库层面优化。由于线程在CPU上运行,而CPU是抢占式的(时间片),因此内存模型中有个程序计数器,专门记住行号,
当运行在此线程中的CPU资源被其他线程抢走后,我们的程序计数器就会记住这个行号,等此线程抢到CPU资源后继续从这个行号开始运行。

kafka消息堆积且CPU过高代码优化相关推荐

  1. 平时只会用Kafka发消息,昨天突然遇到一次Kafka消息堆积生产事故!

    前言 线上kafka消息堆积,所有consumer全部掉线,到底怎么回事? 最近处理了一次线上故障,具体故障表现就是kafka某个topic消息堆积,这个topic的相关consumer全部掉线. 整 ...

  2. kafka消息堆积原因解析

    kafka消息堆积,可以调节如下两个参数 max.poll.records 一次调用poll()返回的最大记录数. 默认值500 就是一次最多拉取500条记录 max.poll.interval.ms ...

  3. 解决kafka 消息堆积问题的排查及调优

    一.背景说明 深夜接到客户紧急电话,反馈腾讯云 kafka 中有大量消息堆积未及时消费.每分钟堆积近 100w 条数据.但是查看 ES 监控,各项指标都远还没到性能瓶颈.后天公司就要搞电商促销活动,到 ...

  4. kafka 消息堆积解决

    一 :背景 线上kafka消费端因日志异常的解决导致消息堆积. 二 : 日志异常解决导致消息堆积 线上kafka消费端日志异常,频繁打印错误日志,服务器磁盘一天就满了,此时其他服务无法正常工作.报错如 ...

  5. mysql statistics cpu_(2条消息) Mysql占用CPU过高如何优化,如何解决

    1. SHOW PROCESSLIST 显示哪些线程正在运行.您也可以使用mysqladmin processlist语句得到此信息.如果您有SUPER权限,您可以看到所有线程.否则,您只能看到您自己 ...

  6. kafka怎么查看消息堆积_Kafka集群消息积压问题及处理策略

    阅读原文​mp.weixin.qq.com 通常情况下,企业中会采取轮询或者随机的方式,通过Kafka的producer向Kafka集群生产数据,来尽可能保证Kafk分区之间的数据是均匀分布的. 在分 ...

  7. 使用kafka消息队列中间件实现跨进程,跨服务器的高并发消息通讯

    作者 | 陈屹       责编 | 欧阳姝黎 近来工作上接收到一项任务,实现c++后台服务器程序,要求它能承载千万级别的DAU读写请求.目前实现千万级高并发海量数据请求的服务器设计在"套路 ...

  8. Kafka CPU使用率高排查思路及解决方案

    一.CPU使用率高的一般排查思路 1) top命令排查CPU使用率高的进程 2) su - omm切换到omm用户,jstack -l 进程pid>>文件路径 3) top -H -p 进 ...

  9. kafka cpu占用高

    一.当前配置 Flink:版本1.4 Flink-Kafka-Connector:0.10.x Kafka-Brokers:3个 Topic-Partitoins:3个 Topic-Replicati ...

最新文章

  1. 程序连接不上mysql数据库文件_数据库问题(程序连接mysql错误)
  2. 购物中心潮--我的创业之路
  3. 麻雀优化算法_多种智能优化算法应用案例分享-附代码
  4. 蒸妙集团用科学熏蒸法,弥补现代人在运动上的缺乏
  5. 开课吧前端:全栈工程师的职业目的方向是什么呢?
  6. 【RL-GAN-Net】强化学习控制GAN网络,用于实时点云形状的补全。
  7. python下载文件的三种方法
  8. 华为eSight网络监控平台安装
  9. 【FPGA目标跟踪】基于FPGA的帧差法和SAD匹配算法的目标跟踪实现
  10. 常用输入法快速输入自定义格式的时间和日期(搜狗/QQ/手心/微软拼音)
  11. 脉冲触发器和边沿触发器的理解(移位寄存器采用边沿触发)
  12. 物联网应用技术竞赛——android笔记
  13. CSS百分比参照物整理
  14. Nacos+openFeign 服务之间调用 出现错误:Load balancer does not contain an instance for the service 解决
  15. 苹果手机直播怎么投屏 苹果手机投影电脑屏幕
  16. 华为5G手机+鸿蒙系统,还能这么玩儿?
  17. Win7 系统下配置WinCE 5.0 模拟器网络环境
  18. 天才小毒妃 第842章 真真是够了
  19. php九宫格图片合成,多宫格图片合成
  20. URLEncode 解释

热门文章

  1. 上海交大校长张杰院士:大学,重新定义你的人生
  2. 让你的python说话
  3. 腾讯技术总监的转行感悟
  4. python下载mp3_Python 教你轻松下载网易音乐歌曲
  5. EasyExcel与POI
  6. strip()函数用法简介
  7. 关于计算机素养论文,计算机应用及青少年网络素养培养论文
  8. Python之strip详解
  9. C# 开发企业内部微应用接入钉钉获取用户信息
  10. struts2最近量产漏洞分析