【JVM】jstack 查询占用最大资源线程|排查死循环等

jstack 应用

首先通过:ps -ef|grep java

得到java pid

查看哪个线程占用最多资源:

找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid  命令查看这个进程下面的所有线程占用情况。

发现线程21742占用最多。

将刚刚发现占用cpu最多的线程id(21742)换算成16进制

命令:printf "%x\n" 21742 的到 线程值 :54ee

查看jstack 生成的文件:

jstack pid | grep tid

如:jstack 21711 | grep 54ee

下面可以看出是哪行代码导致,查看那行代码发现有死循环。跟踪解决完毕。

时间: 2024-10-29 19:07:57

【JVM】jstack 查询占用最大资源线程|排查死循环等的相关文章

在LIUNX服务器上找出web项目中占用cpu资源最多的线程的排查方法

在这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结:linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: 第一步:登陆到web服务所在的liunx服务器,利用top命令获取java的cpu使用率 第二步: 如上图所示,java的进程id为'3260',接下来用top命令单独对这个进程中的所有线程作监视:top -p 3260 -H 第三步: 如上图所示,linux下,所有的

java:找出占用CPU资源最多的那个线程(HOW TO)

在这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结:linux环境下,当发现java进程占用CPU资源很高,且又要想更进一步查出哪一个java线程占用了CPU资源时,按照以下步骤进行查找: 先用top命令找出占用资源厉害的java进程id,如: 如上图所示,java的进程id为'12377',接下来用top命令单独对这个进程中的所有线程作监视: ? 1 top -p 12377 -H 如图: 如上图所示,linux下,所有的java内部线程,其实都对应了一

SQL提示查询处理器未能为执行并行查询启动必要的线程资源

最近SQL经常提示"查询处理器未能为执行并行查询启动必要的线程资源"反应速度变慢. SQL环境为两台服务器做故障转移群集,一主一备,主为48核心,64G内存,备为24核心,64G内存. 经检查发现服务已转移到备用节点(转移原因后续排查),因之前未出现过此问题,故障锁定在了计算机硬件,SQL配置问题上:我们的服务器CPU是4核(48个逻辑CPU),操作系统会将这些逻辑CPU进行分组.每个分组有分多少个逻辑CPU这个由操作系统决定.(每次重启电脑分组的数量可能会变的)假设,12个逻辑cpu

php-cgi进程占用cpu资源过大原因分析及解决

一,开启日志记录,为以后排查做准备 1.1 开启php-fpm.conf的错误日志和慢执行日志和常规日志, 采样一个小时,就可以根据这些日志的内容进行分析问题error_log = /tmp/error.log //错误日志access.log = /tmp/access.$pool.log //常规日志,记录每次访问时间,记录不同参数,以防止恶意攻击,后面会详细解析access.format = "%R – %u %t \"%m %r%Q%q\" %s %f %{mili}

Java - JVM - JStack 简介

概述 jstack 相关内容 背景 之前看了 jvm 相关 命令行工具 jinfo jstat jmap jhat 它们的方向 jvm 启动参数 内存资源 gc 统计 堆栈快照 堆栈分析 堆栈? 不是只有堆吗? 是哈, 那栈呢? 环境 准备 一个 java 程序 我用的是基于 spring-boot 的 webmvc 程序 一个 controller 的 hello world jps 获取 java 程序 pid 最好有点 jvm 的知识 本人水平不咋样, 基本就是门槛边爬行的那种 1. js

8年开发架构师浅析SpringBoot的JVM的内存占用与Docker-spring.io

JVM可能是一个复杂的野兽.值得庆幸的是,大部分复杂性都在幕后,我们作为应用程序开发人员和部署人员通常不必过于担心.随着基于容器的部署策略的兴起,需要引起注意的一个复杂领域是JVM的内存占用. 两种内存 JVM将其内存分为两大类:堆内存和非堆内存.堆内存是人们通常最熟悉的部分.它是存储由应用程序创建的对象的位置.它们一直存在,直到它们不再被引用并被垃圾收集.通常,应用程序使用的堆量将根据当前负载而波动. JVM的非堆内存分为几个不同的区域.我们可以使用HotSpot VM的本机内存跟踪(NMT)

Java CPU占用过高问题排查,windows和Linux

LINUX系统: linux系统比较简单: 1.使用命令 ps -ef | grep 找出异常java进程的pid.  找出pid为 20189 2. top -H -p 20189,所有该进程的线程都列出来了.看看哪个线程pid占用最多,然后将这个pid转换为16进制,我这里是22718转换完58be,注意要小写 3. jstack 20189 > jstack.log 将java进程信息导出到文件,在jstack.log文件中搜索 58be 类似于下图,可以通过线程名或包名之类的判断是那个线

JVM堆内存OOM后其他线程是否还可以正常运行

可以的,当一个线程出现OOM后,他占用内存资源会立马释放掉 public class JvmThread { public static void main(String[] args) { new Thread(() -> { List<byte[]> list = new ArrayList<byte[]>(); while (true) { System.out.println(new Date().toString() + Thread.currentThread()

JVM最多能创建多少个线程: unable to create new native thread

最近需要测试一个长连接服务器,数据上需要达到100W的长连接,测试的客户端,一个线程保持一个连接,发现linux服务器默认创建到3200多个线程的时候,就会报错这个错误"java.lang.OutOfMemoryError: unable to create new native thread.而且,此时整个系统都不能创新新的线程了,不能连接终端,不能执行任何命令. 貌似是内存不足,但实际内存尚有富余,经验证,是linux的一些内核参数限制了创建新的线程. 因为要保持长连接,所有先修改客户端保证