如何通过jstack分析JVM中Java线程的CPU占用及解决线程死锁问题?
- 内容介绍
- 文章标签
- 相关推荐
本文共计736个文字,预计阅读时间需要3分钟。
原文:本文章节主要演示在Windows环境下的操作,Linux环境差别不大。
一、分析CPU占用过高首先编写一个Java程序,并模拟一个死循环,使CPU使用率过高。
负载过大的话,新的请求就无法处理了,这就是很的情况。
本文章主要演示在Windows环境,Linux环境也差不多。
一、分析CPU占用飙高
首先写一个Java程序,并模拟一个死循环。让CPU使用率飙高。CPU负载过大的话,新的请求就处理不了了,这就是很多程序变慢了甚至不能访问的原因之一。
下面是我这里的Controller,启动程序之后,开多个请求访问这个方法。死循环代码就不贴了,自己构造。我这里模拟的一个截取字符串的死循环。
/** * 演示死循环导致cpu使用率飙高 * */ @RequestMapping("/loop") public List<Long> loop(){ return getPartneridsFromJson(); }
启动程序,查看线程id,我这里是 796
开多个请求访问Controller方法,可以在任务管理器看到CPU不断增高。我开了7个窗口请求。Linux下可以通过 top命令查看CPU占用率。
现在发生了问题,开始定位问题。问题是我们手动构造的,实际生产环境肯定比这个复杂的多。
本文共计736个文字,预计阅读时间需要3分钟。
原文:本文章节主要演示在Windows环境下的操作,Linux环境差别不大。
一、分析CPU占用过高首先编写一个Java程序,并模拟一个死循环,使CPU使用率过高。
负载过大的话,新的请求就无法处理了,这就是很的情况。
本文章主要演示在Windows环境,Linux环境也差不多。
一、分析CPU占用飙高
首先写一个Java程序,并模拟一个死循环。让CPU使用率飙高。CPU负载过大的话,新的请求就处理不了了,这就是很多程序变慢了甚至不能访问的原因之一。
下面是我这里的Controller,启动程序之后,开多个请求访问这个方法。死循环代码就不贴了,自己构造。我这里模拟的一个截取字符串的死循环。
/** * 演示死循环导致cpu使用率飙高 * */ @RequestMapping("/loop") public List<Long> loop(){ return getPartneridsFromJson(); }
启动程序,查看线程id,我这里是 796
开多个请求访问Controller方法,可以在任务管理器看到CPU不断增高。我开了7个窗口请求。Linux下可以通过 top命令查看CPU占用率。
现在发生了问题,开始定位问题。问题是我们手动构造的,实际生产环境肯定比这个复杂的多。

