Kafka CPU高排查思路
【摘要】 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使用率高的一般排查思路
- Top命令查看CPU使用率高的进程
- su - omm切换到omm用户,jstack -l 进程pid >> 文件路径
- top -H -p 进程pid,查看CPU使用率高的线程
- "printf "%x\n" 线程号",将CPU高的线程号转换成16进制
- 在jstack文件中搜索16进制的线程号查看具体的导致CPU高的线程来进一步分析
Kafka 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 $2}'|sort|uniq -c|sort -nr
- 查看进程使用句柄数:lsof -p 进程pid | wc -l
如果句柄数高,排查使用句柄数高的进程是否有句柄泄漏;排查操作系统日志,查看是否存在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。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)