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進制信息查看具體的線程
二、?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高的線程,線程都在獲取元數據信息:
Request日志開debug后,大量獲取全部Topic元數據信息,且耗時很長。
CPU長時間頻繁處理元數據請求導致CPU升高。
b)????使用Logstash版本過低,與Kafka高版本服務端不兼容:
Kafka服務端對部分topic加權限后,21005端口訪問未加權限的topic,kafka-authorizer.log日志中大量請求Deny的日志
CPU頻繁處理deny請求導致CPU異常升高。
c)????Sssd異常
使用id -Gn名稱返回結果異常為sssd服務有問題
kafka-authorizer.log日志為大量打印某用戶不屬于kafka組或者kafkaadmin組
服務器的kafka無法正常鑒權,導致用戶頻繁訪問此服務器,cpu異常升高
Kafka
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。