Kafka CPU高排查思路

网友投稿 744 2022-05-28

Top命令查看CPU使用率高的进程

su - omm切换到omm用户,jstack -l 进程pid >> 文件路径

top -H -p 进程pid,查看CPU使用率高的线程

"printf "%x\n" 线程号",将CPU高的线程号转换成16进制

在jstack文件中搜索16进制的线程号查看具体的导致CPU高的线程来进一步分析

集群规划不合理

执行命令grep -c processor /proc/cpuinfo查看CPU核数,执行df -h命令查看Kafka磁盘挂载数,建议每个节点 磁盘挂载数<=processor/2,挂载过多磁盘会导致CPU繁忙。

Kafka配置中查看num.io.threads、num.network.threads、num.replica.fetchers配置,num.io.threads和num.network.threads配置值一般建议是磁盘个数的倍数,但不超过CPU核数。num.replica.fetchers配置值一般建议不超过5,同步线程数过多也会造成CPU繁忙。

分区设置不合理:分区数一般设置为节点个数的倍数,单个节点分区数不超过2000。如果分区设置不合理,所有的生产和消费都集中在某个节点上,也可能导致CPU过高。

操作系统句柄数过高

查看操作系统句柄数:cat /var/log/osinfo/statistics/file-nr.txt

统计各进程打开句柄数:lsof -n|awk '{print }'|sort|uniq -c|sort -nr

查看进程使用句柄数:lsof -p 进程pid | wc -l

Kafka CPU高排查思路

如果句柄数高,排查使用句柄数高的进程是否有句柄泄漏;排查操作系统日志,查看是否存在TCP内存溢出等。

C++客户端版本不兼容

CPU高的线程在获取元数据信息,kafka-request.log日志中大量获取全部topic的元数据信息

jstack信息中CPU高的线程信息如下图所示:

Request日志开debug后,大量获取全部Topic元数据信息,且耗时很长,如下图所示:

集群中分区数很多,CPU长时间频繁处理获取全部topic及分区元数据信息的请求导致CPU升高。

解决办法是升级C++版本到与服务端对应的版本。

Logstash版本过低与高版本服务端不兼容

logstash版本过低,请求全部topic的元数据信息,21005端口访问未加权限的topic,请求全部topic的元数据信息导致获取加了权限的topic信息时请求deny,具体表现是kafka-authorizer.log日志中大量请求Deny的日志,如下图所示:

CPU频繁处理大量deny请求导致CPU异常升高

解决办法是升级Logstash到与服务端对应的版本。

sssd异常

使用id -Gn名称返回结果异常,sssd服务有问题,如下图所示:

kafka-authorizer.log日志为大量打印某用户不属于kafka组或者kafkaadmin组,如下图所示:

服务器的kafka无法正常鉴权,导致用户频繁访问此服务器,cpu异常升高。

解决办法是排查sssd异常的原因并恢复sssd。

EI企业智能 FusionInsight

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:操作系统学习笔记(二十八)~文件系统+连续分配+链接分配+索引分配+空闲空间管理
下一篇:如何使用python创建股票的时间序列可视化分析?
相关文章