在之前处理线上事故的经验中,我发现不少问题是由于开发未设置远程调用的超时时间或者设置的超时时间较长在服务不稳定时导致线程堆积,最终导致有界线程池被打满,触发拒绝策略,影响线上服务可用性,解决方案还是尽可能的设置可接受的超时时间,而不是一味的使用默认配置或者很大的超时时间。部分开发为了自己负责的业务可用,将全局的超时时间调大,就为后续线上服务的稳定性埋下了隐患,原本在低超时时间设定下可以快速失败的请求,会长时间占用线程直到超时,导致线程堆积,服务不可用。
Reference
我在系统设计上犯过的14个错
Threads stuck in java.net.SocketInputStream.socketRead0 – Fast thread