分析线程快照的维度

有多少线程在RUNNABLE,BLOCKED,WAITING和TIMED_WAITING状态?哪一个线程被阻塞了?谁在阻塞别人?哪一个对象被锁了?关注的是运行状态/阻塞状态。

1)RUNNABLE 线程运行中或I/O等待

2)BLOCKED 线程在等待monitor锁(synchronized关键字)

3)TIMED_WAITING 线程在等待唤醒,但设置了时限,超过时限自动唤醒。

4)WAITING 线程在无限等待唤醒;

WAITING

在对象上的线程调用了Object.wait()会进入WAITING状态,直到另一个线程在这个对象上调用了Object.notify()或Object.notifyAll()方法才能恢复。一个调用了Thread.join()的线程会进入WAITING状态直到一个特定的线程来结束。

TIMED_WAITING

进入到Timed Waiting(计时等待)状态的两种方法

1)使用sleep()方法,线程睡醒之后进入到Runnable/Blocked状态;

2)使用wait()方法,wait()如果在毫秒值结束之后还没有被notify()唤醒,就会自动醒来,线程进入到Runnable/Blocked状态;

自动唤醒后,如果能够获得Cpu的时间片,就可以继续执行。和Thread.sleep( ) 方法一样。

Sleep 时的线程状态

TIMED_WAITING 与 WAITING 间的联系还是很紧密的,主要差异在时限(timeout)参数上。

sleep 时的线程状态,进入 TIMED_WAITING 状态的另一种常见情形是调用的 sleep 方法,单独的线程也可以调用。

sleep 方法不会释放锁。javadoc中的确切说法是:The thread does not lose ownership of any monitors.(线程不会失去任何 monitor 的所有权)sleep会持有锁,wait不会。

BLOCKED

BLOCKED 同样可以视作是一种特殊的,隐式的 wait/nofity 机制。等待的条件就是“有锁还是没锁”。

BLOCKED 状态是与 Java 语言级别的 synchronized 机制相关的。

WAITING 状态属于主动地显式地申请的阻塞,BLOCKED 则属于被动的阻塞。

1,现象

通过监控发现,程序中线程数不断飙升。

top -H -p pid 也可以查询当前进程中的线程数量。

2,分析

通过jstack -l pid > thread.log 打印线程快照,并进行分析。

在想一个问题:为什么会创建那么多线程? 都是谁创建的?

用线程分析工具分析一下线程的状况:

把线程快照在线进行分析发现:大量线程的创建都和消息队列有关系。

3,解决

在创建消息队列客户端的时候,如果不设置消费消息线程数和拉取消息线程数,wmb本身会不断去创建新的线程去处理,没有复用原来的线程。

线程分类:大部分线程都在做什么事情?

20210610 线程数不断飙升问题定位相关推荐

  1. 如何查询一个进程下面的线程数(进程和线程区别)

    在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢? 一.对比进程和线程 1)两者概念 -  进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程 ...

  2. java 进程 线程数量_如何查询一个进程下面的线程数(进程和线程区别)

    在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢? 一.对比进程和线程 1)两者概念 -  进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程 ...

  3. 一文详解java线程池 详解Java线程池的七个参数 详解池化技术 java如何选择核心线程数 详解Java线程池的拒绝策略

    目录 引言 线程池使用场景 加快请求响应(响应时间优先) 加快处理大任务(吞吐量优先) 特殊说明 线程池的池化技术 线程池的创建 手动创建 创建newFixedThreadPool线程池 创建newS ...

  4. pg多线程更新会发生死锁_何时用多线程?多线程需要加锁吗?线程数多少最合理?...

    一.什么时候应该使用多线程? 今天看到一个问题,突然有感而发,想聊下这个话题. 不知道大家有没有想过这个问题,就是什么时候我该使用多线程呢?使用多线程就一定会提升系统性能吗? 1.其实是否应该使用多线 ...

  5. linux下查看进程的线程数,linux查看进程的线程数

    top -H -p $PID  #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...

  6. ThreadPoolExecutor最佳实践--如何选择线程数

    去年的一篇<ThreadPoolExecutor详解>大致讲了ThreadPoolExecutor内部的代码实现. 总结一下,主要有以下四点: 当有任务提交的时候,会创建核心线程去执行任务 ...

  7. Vista破解TCP/IP线程数为BT、电驴提速(转)

    Windows vista破解TCP/IP的线程数为BT.电驴提速,这个问题是Vista之家团队接到的最多的问题,解决这个问题,首先要下载一个补丁: 补丁下载: 如何replace: 输入兩个comm ...

  8. Cuda C 最大线程数

    GPU一个线程块中的最大线程数是65535. 从线程硬件原理中得知,为了能通过按位与的哈希算法来定位segments数组的索引,必须保证segments数组的长度是2的N次方(power-of two ...

  9. Java多线程读取本地照片为二进制流,并根据系统核数动态确定线程数

    Java多线程读取图片内容并返回 1. ExecutorService线程池 2. 效率截图 3. 源码 1. ExecutorService线程池 ExecutorService线程池,并可根据系统 ...

  10. 必要时调整应用程序每个辅助进程的线程数

    ASP.NET 的请求结构试图在执行请求的线程数和可用资源之间达到一种平衡.已知一个使用足够 CPU 功率的应用程序,该结构将根据可用于请求的 CPU 功率,来决定允许同时执行的请求数.这项技术称作线 ...

最新文章

  1. Android 热修复总结
  2. 深入理解面向对象 -- 基于 JavaScript 实现
  3. xtrabackup全量备份+binlog基于时间点恢复
  4. 包含contains
  5. Spring Security构建Rest服务-1400-授权
  6. C语言 #运算符 - C语言零基础入门教程
  7. 错误1053服务没有及时_怎样保护服务器的安全?
  8. 【ACM】nyoj_2_括号配对问题_201308091548
  9. Xcode8 - apploader 上传失败 - ERROR ITMS-90168: The binary you uploaded was invalid.
  10. 机器学习中的 Shapley 值怎么理解?
  11. android如何修改视频的分辨率,Android录制视频,视频压缩,设置分辨率,设置视频名称...
  12. kali PIN码破解
  13. 攻防世界 Web高手进阶区 mfw
  14. C语言计算身体质量质数BMI,Python需如何计算身体质量指数BMI从而来判断体型
  15. ext表格内容自动换行
  16. 案例4加减乘除四则运算
  17. 【概率论与数理统计】猴博士 笔记 p15-16 一、二维连续型求概率
  18. Kerloud 飞车在线控制C++教程
  19. 学习计算机视觉,必备六大知识点!(文末有惊喜)
  20. pc android wifi热点,安卓手机做wifi热点让笔记本上网的方法

热门文章

  1. Permission denied (publickey).../RPC failed; curl 92 HTTP/2 stream 0 was.../pack exceeds maximum all
  2. DSP之LCD1602笔记
  3. python卸载库命令_python常用删除库的方法
  4. 因子分析法之因子旋转
  5. 图书管理系统——用例图、类图、时序图
  6. MobileNet网络系列论文及模型V1-V2-V3
  7. java计算机毕业设计南京新东方学校家校通系统源码+程序+lw文档+mysql数据库
  8. potato电脑版连接不上_土豆电脑版-potato chat下载 v2.13.200323 电脑版 - 安下载
  9. 详细完整MySQL8.0.23安装教程
  10. 三角形面积的叉积公式