RegionServer进程运行中,可能会突然挂掉,RegionServer日志中看不到任何错误提示,也不会生成hs_err_pid.log之类的提示。相信许多同学遭遇过这种场景,此时,你应该想到罪魁祸首是OOM(OutOfMemory)。
对于OOM问题,我认为首要问题是:搞清楚RegionServer是被主动还是被动kill的?
1. 先说说何为主动和被动?
主动是指:如果RegionServer发现自己OOM,则自身主动请求去被kill;被动是指:RegionServer没有OOM,但是操作系统内存不够用了,于是OS会选择kill一些进程,那么内存大户RegionServer就可能被动的kill了。
2. 再说说为何要区分主动和被动?
如果是主动,那就说明是RegionServer方的原因。但是,你应该明白绝大部分是因为使用不当hbase引起的,而不是RegionServer的bug之类的问题。比如:应用中put一个超大的cell可能引发OOM(我在测试中就这么搞过......)。所以,你接下来的任务就是如何优化操作hbase的应用了。
如果是被动,说明机器中存在其它内存大户。此时,你需要考虑内存划分是否合理。如何合理,那就是某些应用的内存使用存在问题,这个更需要你来好好寻找了。比如在我遭遇的OOM场景下,就是这种情况,详细过程可以参考另一篇博文: