问题出现前的提要:
1、项目需求:将大量数据通过kafka消息队列转发到另外的项目中
2、项目打完版本后,3点开始cpu开始飙升
报错信息
解决问题方式
1、重启服务器 关闭大量数据的转发,暂时解决问题。
2、开始分析问题
(1)检查代码:查看有没有死锁或者有没有占用大量CPU的代码,检查结果没有发现代码问题,排除问题
(2)通过zabbix 观察cpu和内存的异常过程,通过观察发现cpu在3点钟的时候开始大量飙升。再通过kibana查询当时日志情况。
(3)通过以上的检查没有发现什么特殊异常,只是知道我们3点钟打完版本cpu开始飙升,所以我们这边决定在测试环境进行压测,但是压测结果是没有问题,
(4)为了不影响线上环境,我们决定使用不同topic接收当前的数据,并且在线上开另外两个节点来接收这个数据,并且时时观察当前项目的cpu使用率和 通过kafka manager查看消费信息。(缺点生产环境出现好多多余的topic 影响kafka性能 kafka topic 64到256 吞吐量下降百分之90%多 因为没个topic 或者 分区都对应一个物理文件,文件太多会造成io磁盘竞争过大成为瓶颈 ,序所以需要运维删除多余topic)。
(5)将war部署到新的节点上,开始观察项目cpu、内存信息、kafka消费信息,发现cpu和内存信息都没有问题,只是启动项目的时候有点小上升,并且发现kafka信息开始堆积, 所以这边先将topic分区 分成8个区 因为机器是4台 要为倍数关系最好。分析cpu异常是不是跟时间有关,我观察最近几天zabbix发现半夜3点的时候cpu 都会上升,所以分析应该是3点的时候有定时任务启动导致cpu上升,正好当时我们这边重启项目cpu 也会上升 所以导致项目cpu暴涨导致机器奔溃,
分析结果
导致原因:猜测定时任务导致cpu升高 再加上kafka消息大量堆积和项目重启导致的cpu升高 。