java 性能监控 btrace_Java性能监控与调优(一)

Java性能监控与调优(一)

基于JDK命令行工具的监控

XX参数

非标准化参数,一般用于JVM调优和调试

2d853bebe0fb93f0cb361d69a4361a76.png

a53cdaf1909103458ea871ad7c631405.png

12fed6e80b3d1aa6e6756255baaa880a.png

与此类似:

-Xss等价于-XX:ThreadStackSize

查看JVM运行时参数

65c4a0a74ddb71a435fd3da137b2110f.png

jps(查看java进程的pid)

11e33b5927a0826c22732437bfa53c3c.png

jinfo(查看java进程的信息)

1111229affc5118c608944d338090e91.png

jstat查看JVM统计信息类加载 -class

垃圾收集 -gc

JIT编译 -compiler

47172de9f6c746f4433abe3f938011f8.png

1000和10表示每间隔1000ms输出一次,共十次

6d9e411739544af2cdfafcbac3d31bdc.png

998bdc621ef81125c89a165f079a3ee4.png

导出内存映像文件

我们先制造一个会发生内存溢出的场景:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22@RestController

public class DemoController{

private List userList = new ArrayList<>();

@Resource

private TestService testService;

/***

* -Xmx32M -Xms32M

* @return

*/

@GetMapping("/heap")

public String heap(){

int i = 0;

while(true) {

userList.add(new User(i++, UUID.randomUUID().toString()));

}

}

}

为了方便,我们可以对Xmx和Xms进行设置,这样很快就发生内存溢出。

a58d7cb80567ac9f83c1650466ebb547.png

094999980e8c734332eb8a2dab5d8868.png

导出了内存映像文件之后可以使用mat来查看,这是一个eclipse的内存分析程序。

cc4113a67409a9d61175da23a3ed177e.png

此处的shallow heap指的是该对象本身占用的内存(不包含它的成员)

f6785422c06f3ad53fd17a1f3347f469.png

还可以查看特定对象的引用链

真的是一个非常强大的工具。

jstack(查看线程的栈,检查死锁)

先复习一下线程的状态转换

b20f418ab4487dc7fa18bfb139205ca8.png

e192a99070fc6b8d7aa0048f6d4fe7d1.png

其中nid表示十六进制的pid

那么如何定位线上的问题呢?

一般的思路是:

先通过top命令找到cpu占用率较高的java进程,找到其pid(或者直接通过ps命令找到)

再利用top命令查看线程(具体的参数平台相关)(top -H -p [pid]),找到线程pid

利用jstack输出栈轨迹,通过线程pid定位到具体线程

jvisualvm(可视化分析工具)

到java的bin目录下即可找到jvisualvm

59342459c2254544deb1b38dd32f94c5.png

实际上就是一个命令行工具的图形化集成,不过更加的直观易用,也比较的方便。

该工具还可以分析远程的Java进程,具体通过JMX参数设置,此处不赘述。

btrace

一种更为强大的工具,可以动态地往Java进程织入字节码,

对任意方法的调用(入参,返回等)以及异常等进行拦截。

由于实用性不算太强,故此处不再赘述,仅告知存在。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值