Kafka CPU高排查思路

FI小粉丝 发表于 2021/11/27 17:19:42 2021/11/27
【摘要】 CPU使用率高的一般排查思路Top命令查看CPU使用率高的进程su - omm切换到omm用户,jstack -l 进程pid >> 文件路径top -H -p 进程pid,查看CPU使用率高的线程"printf "%x\n" 线程号",将CPU高的线程号转换成16进制在jstack文件中搜索16进制的线程号查看具体的导致CPU高的线程来进一步分析Kafka CPU高的常见原因及解决办法集群...

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进制的线程号查看具体的导致CPU高的线程来进一步分析

Kafka CPU高的常见原因及解决办法

  1. 集群规划不合理
    1. 执行命令grep -c processor /proc/cpuinfo查看CPU核数,执行df -h命令查看Kafka磁盘挂载数,建议每个节点 磁盘挂载数<=processor/2,挂载过多磁盘会导致CPU繁忙。
    2. Kafka配置中查看num.io.threads、num.network.threads、num.replica.fetchers配置,num.io.threads和num.network.threads配置值一般建议是磁盘个数的倍数,但不超过CPU核数。num.replica.fetchers配置值一般建议不超过5,同步线程数过多也会造成CPU繁忙。
    3. 分区设置不合理:分区数一般设置为节点个数的倍数,单个节点分区数不超过2000。如果分区设置不合理,所有的生产和消费都集中在某个节点上,也可能导致CPU过高。
  2. 操作系统句柄数过高
    1. 查看操作系统句柄数:cat /var/log/osinfo/statistics/file-nr.txt
    2. 统计各进程打开句柄数:lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr
    3. 查看进程使用句柄数:lsof -p 进程pid | wc -l

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

  3. C++客户端版本不兼容

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

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

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

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

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

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

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

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

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

  5. sssd异常

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



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

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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