TDA线程分析初步

  1. Dump:在系统做性能调优以及问题排查时,为了知道当前系统的运行状况,我们经常会使用线程dump的方式来发现系统可能存在的问题。Dump线程的命令通常会使用kill -3 pid或者jstack pid 。把结果输出到指定文件上,,命令:sudo –u adin –H jstack 9926 >>/tmp/9926.tdump。得到dump文件后,需要把文件下载到本地,如果是在日常环境,则可以直接使用sz命令;如果是在线上环境,则需要通过ftp做跳转最终下载到本地。使用步骤,1)ftp命令进入ftp控制台2)open ip打开连接,然后输用户名和密码3)put sourceFile targetFile上传文件4)gettargetFile sourceFile下载文件。通过在线上机器上传文件到ftp,在日常机器上从ftp下载,最后再用sz命令把文件下载到本地。
  2. 线程状态:
    1) Runnable:该状态的线程表示线程正在运行队列中等待OS调度或者正在运行。
    2) Waiting for monitor enty:monitor是java中用来实现线程同步的锁,每个对象(包括Class对象)都有唯一的一个锁,一个时刻同一个锁只能被一个线程占用。该状态的线程表示线程正在等待一个被锁定的monitor。对应的代码可能是synchronized{do some thing},当前的线程需要进入到同步块中,但是当前对象的锁被其他线程占用,当前进程只好waiting for monitor entry。
    3) In Object wait:这个状态的线程表示当前线程在运行时获取了一个锁,但是发现继续运行线程的条件不满足,于是当前线程放弃了对这个锁的占用,即调用锁对象的wait方法。等到其他线程调用了锁对象的notify或者notifyAll方法之后,在等待这个锁的列表中的线程才会被唤醒一个并执行。
    4) Waiting on condition:这个状态表示线程正在等待某个条件的发生,比如等待IO等,当条件发生后,线程会继续运行。这种状态的特点是线程并不释放锁,但因为等待系统资源或者线程调用了sleep方法等原因导致线程处于等待状态。
  3. 工具分析:下载线程分析工具TDA,TDA的下载地址在http://java.net/projects/tda/downloads/directory/webstart,下载完成后,打开TDA,打开先前dump下来的线程文件,我们可以看到当时java进程中的线程状况,TDA的分析结果按照线程状态分五项给我们展示:1)所有线程概览:这一项中我们可以得到当前java进程的总线程数,以及每个状态的线程的大体信息。2)等待锁状态的线程。3)有条件等待状态的线程。4)占用了锁的线程5)当前java进程中所有的锁,以及锁的被竞争占用状态。
  4. 几个经验:
    1) 如果Waiting formonitor enty状态的线程数过多,就要去查找代码,是否使用了过量的synchronized,导致大量线程处于等待锁状态,造成系统性能下降。
    2) 如果waiting oncondition状态的线程过多,则有可能是网络等系统资源比较繁忙,导致线程阻塞。
    3) 业务系统主要查看的是jboss的业务线程,一般是AJP.0.0.0.8009-1类似的名字,并且都应该是存在一个线程池,存在-2….-9等线程。另外一个需要关注的进程是jboss的主进程。
    4) 要多dump几份,如果都指向同一个问题,才可以确定。查看线程所处的状态,如果某一批线程最新所在栈帧都是同一个方法的栈帧,或者都再等待同一个锁,则需要关注改方法的性能,以及过度使用锁同步的可能。
    5) 可以在tda中分析项目中的第五项中查看monitors,特别关注的是nThread waiting,1 Thread locking状态的monitor,这种锁表示有多个线程正常竞争同一个线程,如果多个dump下来的数据还是显示这个monitor是 1 Thread waiting,1 Thread locking的状态,则很有可能是两个线程发生了死锁,要特别关注。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值