java定位线程阻塞_Arthas - 定位 Java 性能问题原来这么简单

目录:

一、Arthas 介绍

二、Arthas 使用场景

三、Arthas怎么使用

四、Arthas 定位性能问题

定位Java代码导致占用CPU高的问题

线程死锁

前言:

在做性能测试的过程中,当遇到Java性能问题,比如CPU飙升,负载突高,内存溢出等问题,需要一个个命令输入,比如jstack,jmap,top。最终才能一步步定位到问题,有时还不能定位到问题,而通过arthas可以很快的定位到问题

一、Arthas 介绍

Arthas 是 Alibaba 在 2018 年 9 月开源的 Java 诊断工具。支持 JDK6+, 采用命令行交互模式,提供 Tab 自动不全,可以方便的定位和诊断线上程序运行问题。

Arthas 官方文档十分详细,本文也参考了官方文档内容,同时在开源在的 GitHub 的项目里的 Issues 里不仅有问题反馈,更有大量的使用案例,也可以进行学习参考。

二、Arthas 使用场景

主要的场景如下:

1、是否需要一个全局视角来查看系统的运行状况?

2、系统 CPU 升高了,到底是哪里占用了 CPU?

3、运行的多线程有死锁吗?有阻塞吗?

4、有什么方法可以监控到 JVM 的实时运行状态?

三、Arthas 怎么使用

1、安装

可以在官方 GitHub 上进行下载,也可以在国内的码云 Gitee 下载。

GitHub 下载

或者 Gitee 下载

打印帮助信息

Java -jar arthas-boot.jar -h

2、运行

从上面下载的 jar 包来看,可以直接用 Java -jar 命令运行

运行方式有如下两种:

方式 1:先运行,再选择 Java 进程 pid

[root@localhost data]# Java -jar arthas-boot.jar

[INFO] arthas-boot version: 3.3.3

[INFO] Found existing Java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.

[1]: 15585 arthas-boot.jar

[2]: 18095 org.apache.catalina.startup.Bootstrap

输入[]里面的数字,回车

b8b8c0d25226efe37a322126d83298c3.png

另外一种方式,运行时选择 Java 进程 pid:

备注:查看运行的 Java 进程信息

9d6397d118f562de11e192eb975d25a5.png

[root@localhost ~]# Java -jar arthas-boot.jar 18095

看到如下信息,就说明启动成功了

6081da3ab596f6fc6d9e2416e1e76bc6.png

3、常用命令

1bad30b0bcccb3c1df4c4560f25a382f.png

4、退出

[arthas@18888]$ shutdown

四、Arthas 定位性能问题

1、全局监控

使用 dashboard 可以实时显示线程,内存,GC,运行环境信息

54921f19d9ae8de55ff2397aff46ac8a.png

2、定位 Java 代码导致占用 CPU 高的问题

在 jmeter 里面跑性能测试场景,在聚合报告里面,可以看到响应时间越来越高

查看系统资源使用情况,输入:top

44c32a954f90a75db9bb14580fb55fee.png

可以看到 cup 占用已经 99% 以上了

在 arthas 里面输入如下命令,查看 CPU 使用率 TOP N 的线程

[arthas@18888]$ thread -n 5

7f81d770155fbff6e384bc98d7191143.png

备注:这里有一个问题,当用 jmeter 发起请求的时候,线程会启动很多,输入 dashboard 或 thread,不会查看到单个 CPU 占用很高,只能用这种 thread -n N 的方式,显示线程栈的执行情况

这些代码导致的性能问题:

68029c7b9ff521536309699a5ccf5edf.png

3、线程死锁

可以从 dashboard 的输出中,看到有 BLOCKED 状态的线程

38dc59c37a291eeb8e58342616adc022.png

再输入如下命令:thread 线程 id

96a8ef518dbd119e6a14e103aba5b064.png

或者直接输入:

[arthas@20917]$ thread -b

a4c67ce3992fd4ec6322042c9c5d4b21.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVN 本地文件锁/服务端文件锁清除步骤

1.本地文件锁,直接cleanup,cleanup界面选择break locks即可 2.服务端文件锁,本地文件右击没有release lock或者break lock的选项时 方法1:右键,svn选择browser repo,找到该文件,右击&#xff0c…

java 对象复活_Java对象复活

java 对象复活总览 收集覆盖了finalize()的对象之后,将其添加到终结处理队列中,以在调用每个对象的finalize()方法之后进行清理。 如果您复活了物体,会发生什么? 何时定案&#xff…

a b和c 15 java_1011. A+B和C (15)

给定区间[-231, 231]内的3个整数A、B和C&#xff0c;请判断AB是否大于C。输入格式&#xff1a;输入第1行给出正整数T(<10)&#xff0c;是测试用例的个数。随后给出T组测试用例&#xff0c;每组占一行&#xff0c;顺序给出A、B和C。整数间以空格分隔。输出格式&#xff1a;对…

深入浅出《设计模式》之工厂模式(C++)

前言 模式介绍 在之前简单工厂模式中&#xff0c;我们介绍了简单工厂模式的缺陷是违背了开放-封闭原则。如果在面馆中添加了烤海参&#xff0c;那将会修改waiter工厂类。违背了类内封闭原则。 还以面馆为例&#xff0c;现在两种面&#xff0c;用一个服务员来卖就可以&#xff0…

当心Spring缓慢的事务回调

TL; DR 如果您的应用程序无法获得新的数据库连接&#xff0c;则重新启动ActiveMQ代理可能会有所帮助。 有兴趣吗 性能问题 几个月前&#xff0c;我们经历了生产中断。 大家都很熟悉&#xff0c;许多请求都失败了&#xff1a; java.sql.SQLTransientConnectionException: Hika…

jmeter学习笔记(八-1)

Jmeter中有较多需要参数化测试的地方&#xff1a; 1.从一个用户登录的接口获取登录后的token值&#xff0c;取值后用于后续接口调用 2.获取用户浏览后的cookies信息&#xff0c;需要用到HTTP Cookie 管理器来为同一线程组提供通用的cookies信息 Jmeter中通过${}形式来取参数值 …

python 对象转dict_如何将python dict对象转换为java等效对象?

总是有jython。这里有一点来自this article&#xff0c;它提供了python/java的良好并排视图The Jython analogues to Javascollection classes are much moretightly integrated into the corelanguage, allowing for more concisedescriptions and useful functionality.For e…

NOIP模拟测试5「星际旅行·砍树·超级树」

星际旅行 0分 瞬间爆炸。 考试的时候觉得这个题怎么这么难&#xff0c; 打个dp&#xff0c;可以被儿子贡献&#xff0c;可以被父亲贡献&#xff0c;还有自环&#xff0c;叶子节点连边可以贡献&#xff0c;非叶子也可以贡献&#xff0c;自环可以跑一回&#xff0c;自环可以跑两回…

学java选i5还是i7_选笔记本电脑,到底CPU是要选i5还是i7

又到了一年毕业季&#xff0c;准备上大学的学生们肯定是摩拳擦掌&#xff0c;准备入手一台新的笔记本电脑。而我们在选购笔记本电脑的时候&#xff0c;经常会遇到不同的配置&#xff0c;比如说同一台笔记本电脑会有i5以及i7两个处理器可供选择&#xff0c;而价格往往相差一两千…

apache apollo_Apache Apollo REST API

apache apolloApache Apollo是新一代&#xff0c;高性能&#xff0c;多协议的消息传递代理&#xff0c;它是从头开始构建的&#xff0c;可以替代ActiveMQ5.x。 我过去曾在博客上发表过文章 &#xff08;第一部分已经与第二部分一起发布了&#xff09;。 Apollo的无阻塞异步体系…

Node 之 模块加载原理与加载方式

Node.js中的模块可以分为原生模块和文件模块&#xff0c;通过Node.js中可以通过require方法导入模块、exports方法导出模块。 1、require导入模块 对于原生模块&#xff08;比如说&#xff1a;http&#xff09;&#xff0c;只需要使用require&#xff08;‘http’&#xff09;导…

php excel 下拉菜单,使用 PHPExcel 遇到的一个问题:下拉列表的数据来源过长时,显示了别的正常的下拉列表的数据来源...

遇到的问题&#xff1a;我们还是先来看手册是怎么说的&#xff1a;It is important to remember that any string participating in an Excel formula is allowed to be maximum 255 characters (not bytes).当下拉列表的数据来源过长(more than 255 characters)时&#xff0c;…

有效的Java –创建和销毁对象

创建和销毁对象&#xff08;第2章&#xff09; 这是Joshua Blochs的《 有效的Java》第2章的简短摘要。我仅包括与自己相关的项目。 静态工厂&#xff08;项目1&#xff09; 静态工厂与构造函数的一些优点&#xff1a; 工厂方法的名称为构造函数添加了描述 他们可以返回预先构…

【洛谷P2743】【poj 1743】[USACO5.1]乐曲主题Musical Themes

题目 还是板子题 因为旋律会同时加减一个数&#xff0c;所以我们在差分数组上做就好了 注意因为差分了&#xff0c;跨越的个数要少一个 基数排序循环写反了&#xff0c;调了好久 qwq /* Date : 2019-07-19 10:17:22 Author : Adscn (adscnqq.com) Link : https://www.cn…

exec导入 php,PHP exec运行一个文件

我正在尝试最后3个小时告诉PHP运行一个简单的文件.我在本地主机中使用wamp服务器用于Windows(Windows 8)我尝试过使用exec()&#xff1a;echo exec(whoami);我得到了权威的回应.还测试了&#xff1a;if(function_exists(exec)) {echo "exec is enabled";}它可能有用吗…

远程连接Oracle 数据库连接报错ORA-12638身份检索失败

数据库版本&#xff1a;oracle11g 当使用navicate或者PLsql使用远程连接服务器的数据库的时候报错 RA-12638身份检索失败 因为是更换了个新电脑出现这种问题了&#xff0c;所以可以排除时服务器数据库的问题&#xff0c;问题应该出现在oracle的客户端上面&#xff1b; 通过修改…

java生成顺丰电子面单,顺丰拼多多电子面单设置教程

100%使用使用拼多多电子面单&#xff0c;无需解密&#xff0c;即可打单发货&#xff0c;让打单更加流畅&#xff0c;减少出错&#xff01;不少商家有疑问&#xff0c;顺丰是月结的合作模式&#xff0c;不用充快递单号&#xff0c;是不是不支持拼多多电子面单呢&#xff1f;当然…

list.action.php,doAction.php里代码可以这样写,大大减少了重复的代码

//接收页面$mysqlinew Mysqli(localhost,root,root,test);if($mysqli->connect_errno){die(Connect Error:.$mysqli->connect_error);}$mysqli->set_charset(utf8);$username$_POST[username];$username$mysqli->escape_string($username);$password$_POST[passwor…

[Jobdu] 题目1530:最长不重复子串

题目描述&#xff1a;最长不重复子串就是从一个字符串中找到一个连续子串&#xff0c;该子串中任何两个字符都不能相同&#xff0c;且该子串的长度是最大的。 输入&#xff1a;输入包含多个测试用例&#xff0c;每组测试用例输入一行由小写英文字符a,b,c...x,y,z组成的字符串&a…

Spring Boot,@ EnableWebMvc和常见用例

事实证明&#xff0c;Spring Boot与标准Spring MVC EnableWebMvc不能很好地融合EnableWebMvc 。 添加注释时发生的事情是禁用了Spring Boot自动配置。 不好的部分&#xff08;浪费了我几个小时&#xff09;是&#xff0c;在任何指南中&#xff0c;您都找不到明确指出的内容。 …