统计Java进程中的线程状态

第一步:查看Java进程ID

第二步:使用jstack命令dump线程信息,看看pid=45890进程中的线程都是什么状态

/usr/local/java/jdk1.8.0_144/bin/jstack 84976 >/opt/test.dump

第三步:统计所有线程分别处于什么状态

grep java.lang.Thread.State /opt/test.dump | awk '{print $2$3$4$5}' | sort | uniq -c


案例:以Tomcat7.0.52为例,查看进程中的线程变化情况

首先查看Tomcat(conf/server.xml)中的线程池配置

1)压测前:Tomcat进程中的线程状态

2)压测中:Tomcat进程中的线程状态



压测时候发现处于运行状态的线程有978个,TIMED_WATTIING的线程有457个。

3)压测后:稍微停一段时间,再查看Tomcat中线程的情况


我们发现处于WAITING状态的线程有1000个。

4)查看dump文件中处于WAITING的线程在做什么

这些线程的状态都是WAITING,并且都是Tomcat的工作线程,说明Tomcat线程池里线程接收到的任务太少,大量线程都空闲着。

总结

1)Tomcat线程池中的minSpareThreads并不是一上来就创建1000个线程,而是在压测过后,才会空闲出1000线程,本文重点在于统计线程状态,此处只是以Tomcat为例,不探讨Tomcat线程池的配置原理。
注:默认配置中,minSpareThreads=10。
2)通过修改配置减少大量的WAITING,WAITING的线程少了,系统上下文切换的次数就会少,因为每一次从WAITTING到RUNNABLE都会进行一次上下文切换。

统计Java进程中的线程状态(jstack+linux)相关推荐

  1. 分析占用了大量 CPU 处理时间的是Java 进程中哪个线程

    为什么80%的码农都做不了架构师?>>>    下面是详细步骤: 1. 首先确定进程的 ID ,可以使用 jps -v 或者 top 命令直接查看 2. 查看该进程中哪个线程占用大量 ...

  2. Java线程状态Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释

    一.线程5种状态 新建状态(New) 新创建了一个线程对象. 就绪状态(Runnable) 线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获 ...

  3. linux java 查找进程中的线程

    这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资 ...

  4. jstack Dump日志文件中的线程状态

    jstack Dump 日志文件中的线程状态 dump 文件里,值得关注的线程状态有: 死锁,Deadlock(重点关注)  执行中,Runnable 等待资源,Waiting on conditio ...

  5. java 线程状态_浅析Java中的线程状态

    一.线程的5种状态 众所周知,Java的线程状态有5种,分别对应上图中五种不同颜色,下面对这5种状态及状态间的转化做相应的解释: 1. 初始化状态:新建一个线程对象 2. 可运行状态:其他线程调用了该 ...

  6. Java中的线程状态

    参考:https://my.oschina.net/goldenshaw?tab=newest&catalogId=3277710 1 线程状态 Java中的线程一共有6种状态. 在某个时刻, ...

  7. 找出Java进程中大量消耗CPU

    问题分析: 1,程序属于CPU密集型,和开发沟通过,排除此类情况. 2,程序代码有问题,出现死循环,可能性极大. Java程序很耗CPU是比较好分析的,有这么几步: 1.通过top命令(top之后再按 ...

  8. 【Linux 线程】同一个进程中的线程共享哪些资源

    进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线 ...

  9. 同一进程中的线程究竟共享哪些资源

    线程共享的环境包括:进程代码段.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯).进程打开的文件描述符.信号的处理器.进程的当前目录和进程用户ID与进程组ID.       进程拥 ...

最新文章

  1. 安装H3C的各种问题
  2. CRM成功实施如何化繁为简
  3. 计算机软件3十2二5,计算机软件基础3.2 操作系统.pdf
  4. nginx:413 Request Entity Too Large 及 修改 PHP上传文件大小配置
  5. mysql锁的一些理解简书_MySQL锁系列之锁的种类和概念
  6. ASP.Net请求处理机制初步探索之旅 - Part 3 管道
  7. iphone iPhone开发中为UINavigationBar设置背景图片方法
  8. Ubuntu18.04LTS+Anaconda+Tensorflow-GPU安装记录
  9. c++ map 析构函数_面向偷懒的编程 - C/C++项目中使用Go的分布式系统库
  10. Java——Eclipse快捷键大全
  11. Arduino--电容式土壤湿度传感器使用及原理
  12. c语言单片机期末试题及答案,单片机原理与应用期末试题及答案
  13. Linux编程:获取时间戳
  14. 学习笔记 Tianmao 篇 recyclerView 辅助的RecycleAdapterImpl类(适配自定义home二型)
  15. BING搜索引擎技巧
  16. 压力测试~一套完整的压力测试项目文档
  17. 问题记录之---nginx temp文件夹
  18. Session.Abandon()的用法
  19. 技术交流:springboot配置阿里云日志服务与log4j2 lookup
  20. python设置分辨率和调整画布大小

热门文章

  1. 数字通信之信号复接(八)
  2. 竞猜活动区块链方案探索
  3. Spring Cloud Discovery——Eureka Discovery Client
  4. python create line_Tkinter create_line problem:错误的#坐标:应为偶数
  5. Kali 安装无线网卡驱动
  6. html5弯道赛车游戏截图
  7. 手机即时通服务器地址修改,手机即时通服务器地址修改
  8. 当前物联网应用中,边缘计算还存在这些问题!
  9. 低格格式化过程及与高级格式化的区别
  10. 条码打印软件之Code32条形码