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

举报
Summer_ 发表于 2022/04/28 14:25:12 2022/04/28
【摘要】 一、CPU使用率高的一般排查思路1) top命令排查CPU使用率高的进程2) su - omm切换到omm用户,jstack -l 进程pid>>文件路径3) top -H -p 进程pid 查看CPU使用率高4) “printf "%x\n" 线程号”将上一步中CPU高的线程号转换成16进制5) 在jstack文件中搜索上一步中的16进制信息查看具体的线程二、 Kafka CPU使用率高的...

一、CPU使用率高的一般排查思路

1) top命令排查CPU使用率高的进程

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

3) top -H -p 进程pid 查看CPU使用率高

ac1.png

4) “printf "%x\n" 线程号”将上一步中CPU高的线程号转换成16进制

ac2.png

5) 在jstack文件中搜索上一步中的16进制信息查看具体的线程

ac3.png

二、 Kafka CPU使用率高的常见原因及解决方案

1.     集群规划不合理

a)    命令grep -c processor /proc/cpuinfo 查看CPU核数,df -h命令查看Kafka磁盘挂载情况,建议每台机器最大挂盘数量 <= processor / 2。挂载过多磁盘也可能导致CPU繁忙。

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

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

2.     操作系统句柄数过高

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

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

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

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

3.     根据CPU使用率高的线程具体排查

a)    使用C++客户端,版本不兼容,kafka-request.log日志中大量获取全部topic元数据的信息:

Jstack信息中查找CPU高的线程,线程都在获取元数据信息:

ac4.png

Request日志开debug后,大量获取全部Topic元数据信息,且耗时很长。

ac5.png

CPU长时间频繁处理元数据请求导致CPU升高。

b)    使用Logstash版本过低,与Kafka高版本服务端不兼容:

      Kafka服务端对部分topic加权限后,21005端口访问未加权限的topic,kafka-authorizer.log日志中大量请求Deny的日志

     ac6.png

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

c)    Sssd异常

使用id -Gn名称返回结果异常为sssd服务有问题

ac7.png

kafka-authorizer.log日志为大量打印某用户不属于kafka组或者kafkaadmin组

ac8.png

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

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。