多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 线程池异常 Java 线程池以有界队列的线程池为例,当新任务提交时,如果运行的线程少于 corePoolSize,则创建新线程来处理请求。如果正在运行的线程数等于 corePoolSize 时,则新任务被添加到队列中,直到队列满。当队列满了后,会继续开辟新线程来处理任务,但不超过 maximumPoolSize。当任务队列满了并且已开辟了最大线程数,此时又来了新任务,ThreadPoolExecutor 会拒绝服务 ### 常见问题和原因 这种线程池异常,一般可以通过开发查看日志查出原因,有以下几种原因: 1. **下游服务 响应时间(RT)过长** 这种情况有可能是因为下游服务异常导致的,作为消费者我们要设置合适的超时时间和熔断降级机制。 另外针对这种情况,一般都要有对应的监控机制:比如日志监控、metrics监控告警等,不要等到目标用户感觉到异常,从外部反映进来问题才去看日志查。 2. **数据库慢 sql 或者数据库死锁** 查看日志中相关的关键词。 3. **Java 代码死锁** `jstack –l pid | grep -i –E 'BLOCKED | deadlock'` 4. **应用线程池设置过小** 可以调整应用线程池大小