使用BPF监视JVM应用程序

这篇博客介绍了如何利用BPF技术监测JVM应用程序,包括Linux跟踪工具概述、JVM中的监视点如探针、readelf和tplist的使用,以及方法和堆栈跟踪在GC分析中的应用。通过实例展示了如何跟踪类加载、方法调用和解决性能问题。
摘要由CSDN通过智能技术生成

使用BPF监视JVM应用程序

参考文章: Fast and secure JVM application monitoring with BPF magic and JVM-BPF

一、Linux跟踪工具的概况

X轴为信息详细程度,Y轴为易于使用情况

  • ftrace 是一种内置机制,其已包含在Linux中。它是一种跟踪性能问题等的工具。但是,它并非设计用于Java。它不能用于跟踪许多有趣的Java事件,例如垃圾回收,类加载等
  • SystemTap 是一种非常底层的工具,可以跟踪用户空间中的内核事件和用户事件 (包括Java事件)。其主要问题是,要使用此工具,需要在其执行期间编译内核模块并将其加载到内核中
  • SysDig 关注于跟踪容器中的性能,但是它只能与系统调用一起使用,提供的功能较少

二、JVM中的监视点

在运行的Java应用程序中,除了由操作系统执行的操作 (系统调用,网络事件) 之外,在大多数最新的Java版本中,OpenJDK还配备了许多USDT探针。它们中的大多数都是开箱即用的。

1. 探针

要探索其中的一些探针,请导航至$JAVA_HOME并查看tapset目录, 或者查看在线文件.

这些.stp文件包含一堆探针的描述和声明,包括其参数。例如,尝试查找gc_collect_tenured_begingc_collect_tenured_end探针描述

# 可选, 通过yum安装1.8.0版本openjdk
$ yum install java-1.8.0-openjdk* -y

# 路径
$ cd /etc/alternatives/java_sdk
$ ls tapset/
hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp     
hotspot_jni-1.8.0.242.b08-0.el7_7.x86_64.stp
hotspot_gc-1.8.0.242.b08-0.el7_7.x86_64.stp  
jstack-1.8.0.242.b08-0.el7_7.x86_64.stp

现在,让我们来看一个更实际的例子。现在,通过使用class_loaded探针来跟踪正在运行的Java应用程序,并查看正在加载哪些类。首先,通过运行以下命令: 看起来有四个参数,并且正在加载的类名作为第一个参数给出

$ grep -A 10 'probe.*class_loaded' tapset/*.stp
tapset/hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp:probe hotspot.class_loaded =
tapset/hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp-  process("/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/lib/amd64/server/libjvm.so").mark("class__loaded")
tapset/hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp-{
   
tapset/hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp-  name = "class_loaded";
tapset/hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp-  class = user_string_n($arg1, $arg2);
tapset/hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp-  classloader_id = $arg3;
tapset/hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp-  is_shared = $arg4;
tapset/hotspot-1.8.0.242.b08-0.el7_7.x86_64.stp-  probestr = sprintf("%s(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值