描述
中午收到群内人员反馈环境访问速度慢。登录验证码打不开等问题。通过查看日志发现是kafka出现问题,无法处理消息。联系运维解决。在排查的过程中使用mobaXterm连接服务器。左下角看到CPU使用频率非常高。于是记录一下通过CPU查看程序占用情况分析问题。
过程
查看进程的占用情况
首先使用top指令可以查到CPU使用率,进程占用CPU的比例。 #搞个连接 Linux的指令详解~~
[root@home ~]# top
84.8 us 就是此时CPU的使用率。下面的红框则是进程占用CPU资源的排名。可以看到前几位都是Java程序且占用资源较多。
查看线程的占用情况
这时我们排查占用率第一个Java进程(该进程的PID 28594 上图可以看到)。看看这个Java进程中线程的占用情况。
top -p 28594 -H
这样就可以看到该进程中每个线程占用了多少CPU
获取某个线程的栈信息
根据上图找到使用率第一的线程 PID = 29171 转为16进制 = 71f3 拼接 0x = 0x71f3
jstack 28594 |grep A 10 0x71f3
# 0x71f3 = 0x + 线程PID转16进制
根据jstack指令可以获取到进程的栈信息。在通过grep过滤某个线程的栈信息。
总结
问题点
1. 问题的发现是通过人员反馈。
2. Kafka挂了
解决方案
1. 增加监控。对中间件设备,业务服务的监控
1.1 中间件设备的治理
使用zabbix(其他监控设备) 监听端口,ping,调用
2.2 对业务服务的治理
使用zabbix 监听服务端口,ping,调用健康检查接口(是否能正常响应,响应时间等)监听服务是否可用。
使用ELK收集服务日志。对错误的日志设置阈值。超过阈值则进行告警
分布式多节点部署服务。保证始终有节点提供服务。
2. Kafka集群化分布式部署
2.1 kafka使用多节点集群部署。保证可用性。