线程耗尽:我们知道java程序中,所有计算都是通过线程来执行的,同时我们为了能够重复利用线程,避免频繁创建线程而消耗资源,一般我们都使用线程池,既然是池,那就表明线程是有限的,既然是有限的就会有耗尽的时候。当我们应用中的线程耗尽了,同时所有已经持有线程的计算任务迟迟不释放线程,那就导致请求超时,系统假死。

例子:

最近我们又遇到了一些类似这样的问题,情况大概是这样的: 业务场景:业务1需要完成两个任务:任务A,任务B,这两个任务相互独立,没有依赖。

问题 A、B这两个任务使用同一个线程池进行多线程并发处理,导致请求超时。

分析:

1、串行处理业务1的过程是这样的:

系统接到业务1,然后交由线程Th去处理。线程Th先处理A,接着处理B,然后释放线程Th。如果任务A、B任何出现等待都会导致线程Th等待。

2、并行处理业务1的过程是这样的:

(1)系统接到业务1,然后交由线程Th去处理。线程Th从线程池中获取线程1处理A,线程2处理B。此时A、B分别由线程1,线程2同时进行,当线程1和线程2都完成任务并释放回到线程池,线程Th也就释放了。

(2)但是任务A、B使用同一个线程池(假设线程池数量=10)进行多线程并发处理,当突然有大量这个业务请求,就会出现任务A把线程池的10个线程全部占用,任务B就会一直等待线程来处理。

(3)要完成业务1,需要完成A、B,但是显然已经完成A的线程1,需要获取一个线程2来处理B,才能将线程1释放,但是线程池耗尽,线程1会陷入一直等待的状态,这也导致了线程Th也是一直等待,最终就是请求超时。

解决方案:

1、可以改为串行执行A、B

2、或者使用不同的线程池处理A、B

线程耗尽一般现象:

1、请求超时,系统假死

2、大部分线程都是在等待(查看线程工具:jdk自动的jps)

3、cpu使用率不高

可能导致线程耗尽的情况:

1、一个业务中的多个任务,由不同线程池处理(上述例子)

2、IO处理未设置超时时间(这个去年遇到过)。

3、使用java 的queue超时时间 是否设置了

关于多线程并发处理的使用,我都会问自己以下几个问题:

1、我们是否真的需要使用多线程并发处理?

2、这样做是否真的解决了问题?

3、资源如何分配?(并不是线程越多处理越快)

关于线程耗尽的情况还有好多,欢迎补充。这是个人浅见,欢迎来踩。

关于线程耗尽导致请求超时系统假死的思考相关推荐

  1. java 线程耗尽_关于线程耗尽导致请求超时系统假死的思考

    线程耗尽:我们知道java程序中,所有计算都是通过线程来执行的,同时我们为了能够重复利用线程,避免频繁创建线程而消耗资源,一般我们都使用线程池,既然是池,那就表明线程是有限的,既然是有限的就会有耗尽的 ...

  2. java 线程耗尽_关于线程耗尽导致请求超时系统假死

    线程耗尽:我们知道java程序中,所有计算都是通过线程来执行的,同时我们为了能够重复利用线程,避免频繁创建线程而消耗资源,一般我们都使用线程池,既然是池,那就表明线程是有限的,既然是有限的就会有耗尽的 ...

  3. Linux 系统假死的解决方案

    Linux 系统有时因为软件不兼容或未知 bug,导致系统假死.比如我的 Ubuntu 14.04 最近使用 vscode 时偶尔会导致系统假死,即鼠标可以移动,但点击无反应. 此时可试试如下解决方案 ...

  4. ubuntu14.04系统假死及强制关机后产生的问题解决

    待机时间比较长时,unbuntu可以设置锁定屏幕并log out,再次使用时需要输入密码登录.昨天在重新登录时遇到了系统假死,一直停留在登录界面并且没有输入密码的输入框.长按电源键强制关机后重新开机, ...

  5. 【Windows系统】win10系统假死,窗口不能动,鼠标能动或不能动,最后蓝屏显示错误码: VIDEO_DXGKRNL_FATAL_ERROR 的解决办法

    1. 问题的出现过程 最近博主自己用的 windows10 系统就碰到了这个问题. 一开始出现这个问题的征兆是鼠标会时不时地卡顿,一出现卡顿就会等个 1-3秒才能动.然后频繁卡顿(注意,这里根据经验就 ...

  6. 千万别在UI线程上调用Control.Invoke和Control.BeginInvoke,因为这些是依然阻塞UI线程的,造成界面的假死...

    .c# Invoke和BeginInvoke 区别 Control.Invoke 方法 (Delegate):在拥有此控件的基础窗口句柄的线程上执行指定的委托. Control.BeginInvoke ...

  7. windows系统假死,无法从睡眠中唤醒

    windows系统假死,无法从睡眠中唤醒 经常有朋友问我,新购买的电脑,或者新安装的系统,为什么电脑开机放在那,过一会不用就黑屏了,无论敲击键盘还是鼠标都没有反应,是不是硬件硬件坏了. 其实不然,是因 ...

  8. 【必看】 一篇 CPU 占用高,导致请求超时的故障排查

    一.发现问题的系统检查 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多. 二.定位故障 根据这种故障 ...

  9. js样式会影响ajax,js ajax同步请求造成浏览器假死的问题

    今天写了一个简单的loading效果,希望在点击加载按钮后会出现loading字样,然后执行ajax同步请求,加载完之后loading样式消失,本来是很简单的需求,结果遇上了很尴尬的问题~ 问题:当我 ...

  10. GC overhead limt exceed 导致的java进程假死

    2019独角兽企业重金招聘Python工程师标准>>> 1.现象 线上后台任务的java进程处于假死状态 2.排查过程 1.查看假死的进程ID ps -ef | grep sku 2 ...

最新文章

  1. Eclipse下搭建C语言开发环境
  2. Rails + React +antd + Redux环境搭建
  3. [机器学习]超参数优化算法-SuccessiveHalving与Hyperband
  4. matlab读取正则找科学,MATLAB常用正则表达式记录
  5. Delete Edges
  6. apache目录 vscode_VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)
  7. java多组List所有的排列组合
  8. Flex移动皮肤开发(一)
  9. vue——后台管理系统框架
  10. 2021年四大流行Android手机自动化测试工具,全在这里了
  11. 魔兽争霸3地图加密,支持重制版-魔兽争霸3地图加密实操,魔兽地图加密工具
  12. 2022完整iOS APP发布App Store上架流程指南
  13. Zotero使用之自定义参考文献格式
  14. 多个工作表数据汇总怎么做?
  15. 百度之星资格赛1003 度度熊与邪恶大魔王
  16. 《C语言程序设计》课程总结报告
  17. python的图片转PDF
  18. java基于springboot的火车高铁购票系统
  19. 【OCR炼丹】解析CASIA数据集OLHWDB部分Python版完整代码
  20. 实验八 数据处理与多项式处理(matlab)

热门文章

  1. 召回率(R值),准确率(P值)以及F值
  2. 正则 纳税号_JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】...
  3. 几行代码快速去掉迅雷临时文件的后缀
  4. 计算机专业论文选题的8个方法
  5. 少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(判断题)2022年6月
  6. python求小于n的最大素数_找出小于n的最大素数,其中n =〜10 ^ 230 - python
  7. 敏捷.高效通过ACP.随笔
  8. android开发工具 go,轻松搭建基于go1.5开发Android应用的环境 | Go语言中文网 | Golang中文社区 | Golang中国...
  9. NexT主题配置优化-出土指南
  10. c语言程序设计伴随矩阵,c语言求方阵的行列式、伴随矩阵算法