问题:
线上程序在运行一段时间偶尔会报(AsyncRequestFutureImpl.java:1196)- #1, waiting for 148 actions to finish on table: monitor:entry_table
分析
- 首先我们是知道线上环境CDH的配置弱鸡,网络的带宽和稳定性也是一言难尽(网络经常有波动,带宽也小)。
- 结合hbase运行日志和图表初步认为报这个的原因是当hbase并发量过高,并且在网络波动时程序对hbase请求超时,同时引发了程序大量资源得不到释放导致了OOM(OOM具体原因还在深入分析)。hbase并发过高是因为Elastic Job设置的所有作业执行时间(core表达式)是都为5分钟,15分钟,20分钟(诸如此类5的倍数)执行时间间隔,由此导致了在整点时会有一次爆发式的hbase请求,当hbase响应不及时的时候程序容易发生OOM。
解决方法
- 减少程序的最大线程数
- 修改Elastic Job的作业触发时间间隔无序,尽量使得作业(特别时复杂作业)错开执行
结果
修改后程序稳定运行,观察hbase的请求曲线也趋于稳定
网友评论