背景
一个商户中心系统,线程数配置的阈值为800,并发量不高,但是突然报警提示超过设定的最大线程数。
排查过程
联系运维组,执行jmap -dump。都是名称有规律的hystrix守护线程,通过这个线索排查到问题在于,feign调用时,hystrix的开启的守护线程问题,如下:
hystrix-risk-trade-platform
hystrix-invoice
hystrix-kohala-card
hystrix-merchant-open-api
原理在于当执行feign逻辑时,会判断currentThreadCount<maxQueueSize,若小于则每次都会新建一个线程来执行网络请求。
如果coreSize设置的过大,通过feign调用的服务过的,且每个服务调用的次数足够多,将导致wating线程数很大
当核心线程数coreSize设置为200,5个服务持续调用,当调用1000次后线程总数将达到1000,每个服务200线程 如果并发低的话 可能只有几个线程在工作 其他线程都在sleep。
解决方案
调整feign hystrix的配置,经过测试,将配置修改如下:
hystrix:
command: