java程序cpu占用过高,大量TIMED_WAITING (parking)状态线程

sinat_27054329 2020-02-29 11:21:46

没有用线程池,只new了一个线程
jastack看到都是TIMED_WAITING (parking)状态,也没发现业务代码相关的类
也没有哪个线程占了特别高的资源,都很平均,但这个状态的有好几百个





哪位大侠知道啥原因么,或者咋排查
...全文
14711 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
说好不能打脸 2020-09-04
  • 打赏
  • 举报
回复
你看错位置了,你截图里面的线程是线程池里面驻留的线程 在方法栈显示以上内容的情况下,显示TIMED_WAITING (parking)状态是正常的,至少这两个线程不是你new出来的线程
sinat_27054329 2020-03-11
  • 打赏
  • 举报
回复
引用 20 楼 weixin_44665770 的回复:
你好,能说一下最后是咋处理的吗?我这也出现了一样的情况,但没有头绪 不知道咋搞。。。。
发现那些线程是业务线程没注意看
weixin_44665770 2020-03-10
  • 打赏
  • 举报
回复
你好,能说一下最后是咋处理的吗?我这也出现了一样的情况,但没有头绪 不知道咋搞。。。。
iteye_14691 2020-03-04
  • 打赏
  • 举报
回复 1
从日志上看怀疑是定时任务出的问题
xiaoxiangqing 2020-03-03
  • 打赏
  • 举报
回复
要检查一下程序,是不是用到了异步等待
luj_1768 2020-03-03
  • 打赏
  • 举报
回复
可能是在等待系统服务。与java 的服务方案有关。
sinat_27054329 2020-03-02
  • 打赏
  • 举报
回复
引用 3 楼 maradona1984 的回复:
前一阵子我们有台阿里云ecs也这样,如果代码不存在问题,或许就是这台机器存在问题,因为我们其他服务器CPU一直正常,但就这台CPU都是满的,可以考虑换台机器试试
其它服务器也会cpu占的很高,但是代码也排查不出啥,那些大量线程不涉及业务代码
maradona1984 2020-03-02
  • 打赏
  • 举报
回复
前一阵子我们有台阿里云ecs也这样,如果代码不存在问题,或许就是这台机器存在问题,因为我们其他服务器CPU一直正常,但就这台CPU都是满的,可以考虑换台机器试试
sinat_27054329 2020-03-02
  • 打赏
  • 举报
回复
有没有大佬解答下
sinat_27054329 2020-03-02
  • 打赏
  • 举报
回复
引用 11 楼 jiangxiaoma111 的回复:
[quote=引用 9 楼 sinat_27054329 的回复:] [quote=引用 7 楼 jiangxiaoma111 的回复:] 线程的创建不受控制。top 命令的监控中显示你这个程序共创建了7637个线程,只有39个线程在运行状态。线程的大量创建和销毁,以及线程的上下文切换都会导致cpu负载升高。
业务代码中只在项目启动创建了一个线程(这个线程里面有个while循环,但这个循环没有再创建线程),也没有线程池,为啥这么多线程,大佬知道啥情况可能导致?[/quote]
引用 9 楼 sinat_27054329 的回复:
[quote=引用 7 楼 jiangxiaoma111 的回复:] 线程的创建不受控制。top 命令的监控中显示你这个程序共创建了7637个线程,只有39个线程在运行状态。线程的大量创建和销毁,以及线程的上下文切换都会导致cpu负载升高。
业务代码中只在项目启动创建了一个线程(这个线程里面有个while循环,但这个循环没有再创建线程),也没有线程池,为啥这么多线程,大佬知道啥情况可能导致?[/quote] 你看下堆栈信息。ThreadPoolExecutor 这个就是线程池,也就表示你肯定用了线程池,但是用法不对。你得把代码贴出来或者把流程图画出来,别人才能帮你分析问题出在哪?目前根据你给出的信息只能推断出 1. 使用的有线程池,但线程池使用方法不对 2. 手工创建线程,但是线程没有及时销毁或者短时间内创建大量线程[/quote] 大概知道啥问题了,多谢
sinat_27054329 2020-03-02
  • 打赏
  • 举报
回复
引用 13 楼 社交恐惧的岛主 的回复:
从日志上看怀疑是定时任务出的问题
大概知道啥问题了,多谢
悟道|养家 2020-03-02
  • 打赏
  • 举报
回复
从日志上看怀疑是定时任务出的问题
悟道|养家 2020-03-02
  • 打赏
  • 举报
回复
定时任务的处理逻辑是什么?
jiangxiaoma111 2020-03-02
  • 打赏
  • 举报
回复 1
引用 9 楼 sinat_27054329 的回复:
[quote=引用 7 楼 jiangxiaoma111 的回复:] 线程的创建不受控制。top 命令的监控中显示你这个程序共创建了7637个线程,只有39个线程在运行状态。线程的大量创建和销毁,以及线程的上下文切换都会导致cpu负载升高。
业务代码中只在项目启动创建了一个线程(这个线程里面有个while循环,但这个循环没有再创建线程),也没有线程池,为啥这么多线程,大佬知道啥情况可能导致?[/quote]
引用 9 楼 sinat_27054329 的回复:
[quote=引用 7 楼 jiangxiaoma111 的回复:] 线程的创建不受控制。top 命令的监控中显示你这个程序共创建了7637个线程,只有39个线程在运行状态。线程的大量创建和销毁,以及线程的上下文切换都会导致cpu负载升高。
业务代码中只在项目启动创建了一个线程(这个线程里面有个while循环,但这个循环没有再创建线程),也没有线程池,为啥这么多线程,大佬知道啥情况可能导致?[/quote] 你看下堆栈信息。ThreadPoolExecutor 这个就是线程池,也就表示你肯定用了线程池,但是用法不对。你得把代码贴出来或者把流程图画出来,别人才能帮你分析问题出在哪?目前根据你给出的信息只能推断出 1. 使用的有线程池,但线程池使用方法不对 2. 手工创建线程,但是线程没有及时销毁或者短时间内创建大量线程
sinat_27054329 2020-03-02
  • 打赏
  • 举报
回复
引用 8 楼 percentfl 的回复:
楼上有理 睡眠中的线程太多,导导致占用了大量的空间, 个人意见 可以尝试修改一下逻辑,把睡眠中的线程数据先存储到数据库中,销毁线程来节约空间,等需要运行时候在从数据库中取出就好。
线程放到数据库?咋理解,能具体点么
sinat_27054329 2020-03-02
  • 打赏
  • 举报
回复
引用 7 楼 jiangxiaoma111 的回复:
线程的创建不受控制。top 命令的监控中显示你这个程序共创建了7637个线程,只有39个线程在运行状态。线程的大量创建和销毁,以及线程的上下文切换都会导致cpu负载升高。
业务代码中只在项目启动创建了一个线程(这个线程里面有个while循环,但这个循环没有再创建线程),也没有线程池,为啥这么多线程,大佬知道啥情况可能导致?
percentfl 2020-03-02
  • 打赏
  • 举报
回复
楼上有理
睡眠中的线程太多,导导致占用了大量的空间,
个人意见 可以尝试修改一下逻辑,把睡眠中的线程数据先存储到数据库中,销毁线程来节约空间,等需要运行时候在从数据库中取出就好。
jiangxiaoma111 2020-03-02
  • 打赏
  • 举报
回复
线程的创建不受控制。top 命令的监控中显示你这个程序共创建了7637个线程,只有39个线程在运行状态。线程的大量创建和销毁,以及线程的上下文切换都会导致cpu负载升高。
sinat_27054329 2020-03-02
  • 打赏
  • 举报
回复
引用 5 楼 u014480075 的回复:
有没有循环之类得操作
有,循环里面调用其它服务或者操作redis,mysql?但这些业务需求这样做,有数据来就得操作,所有一直循环
u014480075 2020-03-02
  • 打赏
  • 举报
回复
有没有循环之类得操作
加载更多回复(1)

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧