Kafka无法启动问题调研

事故的发生

2018.10.13早上9点左右,正好周六时间,突然收到告警说Kafka进程挂了,刚开始没注意,让同事重启,发生仍然起不来,仔细查看日志,发现会生成如下文件:hs_err_pid25501.log ,内容的开头为:

#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 65536 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (os_linux.cpp:2640), pid=25501, tid=0x00007f035aef6700

初步觉得是内存不够用了,所以按照上面的提示修改各种Java的启动参数,把分配给Kafka的内存减少,终于能够正常启动了,所以也放松了警惕。

再次发生

到了下午4点左右,再次收到告警Kafka进程挂了,这次尝试了各种方法也无法启动,最长运行35分钟左右就会挂,于是我们都来到公司一起分析原因。经过仔细查看,发现了kafka在退出时,输出了错误日志如下:

2018-10-13 19:12:08,103|ERROR|ReplicaFetcherThread-0-5|kafka.utils.Logging$class.error:76|[ReplicaFetcher replicaId=0, leaderId=5, fetcherId=0] Error while processing data for partition mts_mpid-5|
org.apache.kafka.common.errors.KafkaStorageException: Error while rolling log segment for mts_mpid-5 in dir /data8/kafka/logs
Caused by: java.io.IOException: Map failed
        at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:940)
        at kafka.log.AbstractIndex.<init>(AbstractIndex.scala:67)
        at kafka.log.OffsetIndex.<init>(OffsetIndex.scala:53)
        at kafka.log.LogSegment$.open(LogSegment.scala:560)
        at kafka.log.Log$$anonfun$roll$2.apply(Log.scala:1340)
        at kafka.log.Log$$anonfun$roll$2.apply(Log.scala:1316)
        at kafka.log.Log.maybeHandleIOException(Log.scala:1678)
        at kafka.log.Log.roll(Log.scala:1316)
        at kafka.log.Log.kafka$log$Log$$maybeRoll(Log.scala:1303)
        at kafka.log.Log$$anonfun$append$2.apply(Log.scala:726)
        at kafka.log.Log$$anonfun$append$2.apply(Log.scala:640)
        at kafka.log.Log.maybeHandleIOException(Log.scala:1678)
        at kafka.log.Log.append(Log.scala:640)
        at kafka.log.Log.appendAsFollower(Log.scala:623)
        at kafka.cluster.Partition$$anonfun$appendRecordsToFollower$1.apply(Partition.scala:560)
        at kafka.cluster.Partition$$anonfun$appendRecordsToFollower$1.apply(Partition.scala:560)
        at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:250)
        at kafka.utils.CoreUtils$.inReadLock(CoreUtils.scala:256)
        at kafka.cluster.Partition.appendRecordsToFollower(Partition.scala:559)
        at kafka.server.ReplicaFetcherThread.processPartitionData(ReplicaFetcherThread.scala:112)
        at kafka.server.ReplicaFetcherThread.processPartitionData(ReplicaFetcherThread.scala:43)
        at kafka.server.AbstractFetcherThread$$anonfun$processFetchRequest$2$$anonfun$apply$mcV$sp$1$$anonfun$apply$2.apply(AbstractFetcherThread.scala:183)
        at kafka.server.AbstractFetcherThread$$anonfun$processFetchRequest$2$$anonfun$apply$mcV$sp$1$$anonfun$apply$2.apply(AbstractFetcherThread.scala:169)
        at scala.Option.foreach(Option.scala:257)
        at kafka.server.AbstractFetcherThread$$anonfun$processFetchRequest$2$$anonfun$apply$mcV$sp$1.apply(AbstractFetcherThread.scala:169)
        at kafka.server.AbstractFetcherThread$$anonfun$processFetchRequest$2$$anonfun$apply$mcV$sp$1.apply(AbstractFetcherThread.scala:166)
        at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
        at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
        at kafka.server.AbstractFetcherThread$$anonfun$processFetchRequest$2.apply$mcV$sp(AbstractFetcherThread.scala:166)
        at kafka.server.AbstractFetcherThread$$anonfun$processFetchRequest$2.apply(AbstractFetcherThread.scala:166)
        at kafka.server.AbstractFetcherThread$$anonfun$processFetchRequest$2.apply(AbstractFetcherThread.scala:166)
        at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:250)
        at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:164)
        at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:111)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)
Caused by: java.lang.OutOfMemoryError: Map failed
        at sun.nio.ch.FileChannelImpl.map0(Native Method)
        at sun.nio.ch.FileChannelImpl.map(FileChannelImpl.java:937)
        ... 34 more

找了系统管理员查看主机是否有硬件异常后者一些内核问题,系统管理员经过调查一番,也没有任何结果,主机非常正常,也没有发生过内存非配错误。内存也非常充足,Swap也一直空闲,没有使用过,各种内核参数调整后,也无法阻止错误的发生。

解决问题

到网上查了一下,关于这个异常的解决方案,大多数调整到64位Java虚拟机,调整内存运行参数等,我们已经是使用64位虚拟机运行了,而且内存参数也调整过,所以也不适合我们。

问了系统管理员会不会是内存映射文件方式有限制,他表示缺省配置都非常充足,于是查看了一下现在的大小为65530。

root@ubuntu # cat /proc/sys/vm/max_map_count
65530

我们的kafka集群占用空间非常大,12个磁盘 * 4T的空间,这样打开的文件数应该不会小,所以这次启动Kafka进程后,查看了一下进程映射文件的数量:

root@ubuntu # cat /proc/61764/maps  | wc -l
53620

一下子就到了5万多,而且一直在上涨,估计就是这个问题了,于是调整参数。

root@ubuntu # sysctl -w vm.max_map_count=262144
root@ubuntu # sysctl -a|grep vm.max_map_count
vm.max_map_count = 262144

这次终于能够启动了,但是启动时间超长,花了1个多小时才最终启动起来,而且最终进程打开的映射文件数果然超过了65530。
所以问题到这基本就得到了解决,那么是什么原因造成映射文件这么多呢?本文先不回答这个问题,因为第二天我们又碰到了一个问题,在哪个问题中进行解答。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容