什么有效办法避免中间件实例行hang死?
收起讨论hang死,我们先排除掉因为中间件bug导致的hang死,因为这类情况怎么避免要看那个coder的code。
1)由系统资源不足导致的hang
例如,jvm的heapsize太小,不足以运行这个应用服务器。这种情况就是加资源
2)应用逻辑导致
例如内存泄露,这个很难定位。但很好解决--restart。所以我见过很多企业的系统有定期重启的运维策略。所以内存资源充足的定义是:在下次系统重启之前内存没有被耗尽。
避免的方法,1)定期重启,2)采用集群,挂了一个不要紧,只要不是同时挂就行。
3)资源争用导致
不当的配置也会导致中间件处于假死状态。比如某类资源(session或jdbc)被应用完全占满了,并且短期不释放,这样新的请求就没法执行,造成了假死的情况。
这类情况,要做好超时放弃的参数配置。
但总而言之,采用集群是个解决问题的大招。IT行业从上世纪的硬件高可用转变为今天的软件控制的高可用,就是要解决各种解不了的问题。