linux 使用jstack_记一次linux通过jstack定位CPU使用过高问题或排查线上死锁问题

一、java定位进程

在服务器中终端输入命令:top

可以看到进程ID,为5421的cpu这列100多了。

记下这个数字:5421

二、定位问题进程对应的线程

然后在服务器中终端输入命令:top -Hp 5421

作用是查看里程内部线程资源占用情况。5421为第二步获取到的进程id

可以看到第一行cpu占用特别高,就是它了。记住,此时第一列PID是线程ID:5463

注意这个ID是十进制,但是java线程堆栈是采用是16进制。那么我们转换一下。

printf "%x\n" 5463

输出结果:

1557

三、通过jstack命令找到线程对应代码

现在我们需要用到之前的进程ID(5421)和线程的16进制数字(1557)。

在服务器中终端输入命令:jstack -l 5421|grep 1557 -C 8

可看到线程处于运行状态,代码在BugDemoController类的17行,也就是我们的循环所在行。

这里解释一下grep后页-C 8意思是显示查找目标行的前后8行,不加的话就只有一行,可能一时看不出问题来。

当然你也可以更改一下:

-A 8后8行

-B 8前8行

PS:本例方法也可用于排查线上死锁问题。

(转)Linux下java进程CPU占用率高-分析方法

Linux下java进程CPU占用率高-分析方法 原文:http://itindex.net/detail/47420-linux-java-%E8%BF%9B%E7%A8%8B?utm_source ...

Linux下java进程CPU占用率高分析方法(一)

Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

Linux下java进程CPU占用率高分析方法

Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

Linux命令排查线上问题常用的几个

排查线上问题常用的几个Linux命令 https://www.cnblogs.com/cjsblog/p/9562380.html top 相当于Windows任务管理器 可以看到,输出结果分两部分, ...

Linux下java进程CPU占用率高分析方法(二)

1. 通过 top 命令查看当前系统CPU使用情况,定位CPU使用率超过100%的进程ID:2. 通过 ps aux | grep PID 命令进一步确定具体的线程信息:3. 通过 ps -mp pi ...

java 一次CPU占用过高问题的排查及解决

最近一段时间  某台服务器上的一个应用总是隔一段时间就自己挂掉      用top看了看  从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID ...

MongoDB CPU使用较高,如何排查?

前言 首先,我们简单梳理一下,CPU 在什么情况下才算负载较高?负载查看是通过"uptime"命令查看.大家都知道,命令显示的结果分别表示1分钟.5分钟.15分钟的负载情况,这点就 ...

Jstack定位CPU使用最多的线程及代码

jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多.下面我们来一个实例找出某个Java进程中最耗费CPU的Java线程并定位堆栈信息,用到的命令有 ...

使用jstack分析cpu消耗过高的问题

我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2    18   ...

随机推荐

JavaScript进阶(二)

什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...

asp.net 设置页面的默认按钮(敲回车按钮所触发的默认按钮)

来源:http://blog.csdn.net/zanychou/article/details/6128872 设置一个页面的默认按钮主要代码: this.Page.Form.DefaultButt ...

Pandas中DateFrame修改列名

Pandas中DateFrame修改列名 在做数据挖掘的时候,想改一个DataFrame的column名称,所以就查了一下,总结如下: 数据如下: >>>import pandas ...

模拟http或https请求,实现ssl下的bugzilla登录、新增BUG,保持会话以及处理token

1.增加相应httpclient 需要的jar包到工程,如果是maven工程请在pom.xml增加以下配置即可: org.apach ...

Expert for SQL Server 诊断系列

Expert for SQL Server 诊断系列 Expert 诊断优化系列------------------锁是个大角色   前面几篇已经陆续从服务器的几个大块讲述了SQL SERVER数据库 ...

【Java基础】反射机制

反射 反射可以使我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码链接.反射允许我们在编写和执行时,使我们的代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类 ...

Java基础小知识1——分别使用字节流和字符流复制文件

在日常使用计算机过程中经常会涉及文件的复制,今天我们就从Java代码的角度,看看在Java程序中文件复制的过程是如何实现的. 1.使用字节流缓冲区复制文件 示例代码如下: import java.io ...

Activity与Fragment数据传递之Fragment从Activity获取数据

整理Fragment与Activity之间的数据交换,大体上包括三种: 1.Fragment从Activity获取数据 2.Activity从Fragment获取数据 3.Fragment之间获取数据 ...

js判断一个对象{}是否为空对象,没有任何属性

// js如何判断一个对象{}是否为空对象,没有任何属性 if (typeof model.rows === "object" && !(model.rows in ...

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值