Java堆栈简单分析:线程中有队列堆积大量任务导致请求无响应。

博客分析了Java应用中通过Jstack发现CPU异常升高至120%,线程存在死循环的可能性。通过线程堆栈信息,注意到'async-or-role-task-dispatch-5'线程处于RUNNABLE状态,而其他类似线程在等待。这表明可能由于任务队列堆积,导致特定任务持续执行,进而引发其他线程无响应的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 Jstack pid 打印出堆栈信息:进行初步分析:

1.没看到线程有死锁的标志。

2.通过top命令 分析。CPU确实存在异常,达到120%。初步判断是否有死循环的问题?

3.判断死循环一般会gc 很频繁。gc线程也应该大量占用cpu,ps -mp pid -o THREAD,tid,time 发现有几条玩家线程cpu占用高。

4.Jstack 打印出来。

"async-or-role-task-dispatch-5" #56 daemon prio=5 os_prio=0 tid=0x00007f4942648800 nid=0x5cd5 runnable [0x00007f48704eb000]
   java.lang.Thread.State: RUNNABLE
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.siftDown(ScheduledThreadPoolExecutor.java:908)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.finishPoll(ScheduledThreadPoolExecutor.java:1055)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1085)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

"async-or-role-task-dispatch-4" #55 daemon prio=5 os_prio=0 tid=0x00007f483c003800 nid=0x5cd4 waiting on condition [0x00007f48705ec000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x000000064fe60178> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concur

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值