一,问题描述
今天上午时候,kafka的一个topic涌上来超过平常值的一堆数据,消费客户端就开始出现了几个明显的问题:
1,首先是ZK连接超时
2,CPU飙升到400%
3,观察程序GC,发现老年代,S0,Eden这三个,100%;
4,线程数目太多
二,问题分析
在从kafka获取到数据之后,我使用了一个可回收线程池来进行存入hbase的操作,可回收线程池在使用时候,如果线程不够用,就会继续去创建线程,导致最后观察的时候,发现这个进程有2000多个线程在跑,线程之间的切换,是很耗费性能的,所以带来的CPU飙升,后来使用了固定大小的线程池,多开几个客户端取消费的方式,发现CPU降低下去了;随之下去的是GC情况,观察了几个钟头,始终没有发现FULL GC的情况。另外,在使用Kafka去拉取数据的时候,每次拉取完,使用Thread.sleep 0的方式,暂时让出CPU,不让这个获取数据的线程长期占用时间片;程序正常跑了之后,又回头想了想ZK连接超时的问题,感觉可能是FULL GC太频繁,每次都需要耗费很长的时间,导致了连接超时的问题;