基于JavaAgent的全链路监控四《JVM内存与GC信息》
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了基于JavaAgent的全链路监控四《JVM内存与GC信息》,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4774字,纯文字阅读大概需要7分钟。
内容图文
![基于JavaAgent的全链路监控四《JVM内存与GC信息》](/upload/InfoBanner/zyjiaocheng/956/83352a2d9ebf4557ba1dcbc8d03845a8.jpg)
章节列表 | 关注微信公众号,bugstack虫洞栈,回复<基于JavaAgent的全链路监控>获取源码
- 基于JavaAgent的全链路监控一《嗨!JavaAgent》
- 基于JavaAgent的全链路监控二《通过字节码增加监控执行耗时》
- 基于JavaAgent的全链路监控三《ByteBuddy操作监控方法字节码》
- 基于JavaAgent的全链路监控四《JVM内存与GC信息》
- 基于JavaAgent的全链路监控五《ThreadLocal链路追踪》
- 基于JavaAgent的全链路监控六《开发应用级监控》
案例简述
除了监控java方法的执行耗时,我们还需要获取应用实例的jvm内存与gc信息,以实时把控我们的服务器性能是否在安全范围。监控jvm内存与gc信息是非常重要的,尤其是在大促以及微博火热爆点的时候,我们需要根据监控信息进行扩容,以保证系统稳定。
环境准备
1、IntelliJ IDEA Community Edition
2、jdk1.8.0_45 64位
配置信息(路径相关修改为自己的)
1、配置位置:Run/Debug Configurations -> VM options
2、配置内容:-javaagent:E:\itstack\GIT\itstack.org\itstack-demo-agent\itstack-demo-agent-04\target\itstack-demo-agent-04-1.0.0-SNAPSHOT.jar=testargs
代码示例
itstack-demo-agent-04
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── org.itstack.demo.agent
│ │ ├── JvmStack.java
│ │ └── MyAgent.java
│ └── resources
│ └── META-INF
│ └── MANIFEST.MF
└── test
└── java
└── org.itstack.demo.test
└── ApiTest.java
JvmStack.java
/**
* 博客:http://itstack.org
* 论坛:http://bugstack.cn
* 公众号:bugstack虫洞栈 {获取学习源码}
* create by fuzhengwei on 2019
*/
class JvmStack {
private static final long MB = 1048576L;
static void printMemoryInfo() {
MemoryMXBean memory = ManagementFactory.getMemoryMXBean();
MemoryUsage headMemory = memory.getHeapMemoryUsage();
String info = String.format("\ninit: %s\t max: %s\t used: %s\t committed: %s\t use rate: %s\n",
headMemory.getInit() / MB + "MB",
headMemory.getMax() / MB + "MB", headMemory.getUsed() / MB + "MB",
headMemory.getCommitted() / MB + "MB",
headMemory.getUsed() * 100 / headMemory.getCommitted() + "%"
);
System.out.print(info);
MemoryUsage nonheadMemory = memory.getNonHeapMemoryUsage();
info = String.format("init: %s\t max: %s\t used: %s\t committed: %s\t use rate: %s\n",
nonheadMemory.getInit() / MB + "MB",
nonheadMemory.getMax() / MB + "MB", nonheadMemory.getUsed() / MB + "MB",
nonheadMemory.getCommitted() / MB + "MB",
nonheadMemory.getUsed() * 100 / nonheadMemory.getCommitted() + "%"
);
System.out.println(info);
}
static void printGCInfo() {
List<GarbageCollectorMXBean> garbages = ManagementFactory.getGarbageCollectorMXBeans();
for (GarbageCollectorMXBean garbage : garbages) {
String info = String.format("name: %s\t count:%s\t took:%s\t pool name:%s",
garbage.getName(),
garbage.getCollectionCount(),
garbage.getCollectionTime(),
Arrays.deepToString(garbage.getMemoryPoolNames()));
System.out.println(info);
}
}
}
MyAgent.java
/**
* 博客:http://itstack.org
* 论坛:http://bugstack.cn
* 公众号:bugstack虫洞栈 {获取学习源码}
* create by fuzhengwei on 2019
*/
public class MyAgent {
public static void premain(String agentArgs, Instrumentation inst) {
System.out.println("this is my agent:" + agentArgs);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
public void run() {
JvmStack.printMemoryInfo();
JvmStack.printGCInfo();
System.out.println("===================================================================================================");
}
}, 0, 5000, TimeUnit.MILLISECONDS);
}
}
MANIFEST.MF
Manifest-Version: 1.0
Premain-Class: org.itstack.demo.agent.MyAgent
Can-Redefine-Classes: true
ApiTest.java
/**
* 博客:http://itstack.org
* 论坛:http://bugstack.cn
* 公众号:bugstack虫洞栈 {获取学习源码}
* create by fuzhengwei on 2019
* -javaagent:E:\itstack\GIT\itstack.org\itstack-demo-agent\itstack-demo-agent-04\target\itstack-demo-agent-04-1.0.0-SNAPSHOT.jar=testargs
*/
public class ApiTest {
public static void main(String[] args) {
while (true) {
List<Object> list = new LinkedList<>();
list.add("嗨!JavaAgent");
list.add("嗨!JavaAgent");
list.add("嗨!JavaAgent");
}
}
}
测试结果
this is my agent:testargs
init: 192MB max: 2708MB used: 5MB committed: 184MB use rate: 3%
init: 2MB max: 0MB used: 5MB committed: 7MB use rate: 75%
name: PS Scavenge count:1 took:2 pool name:[PS Eden Space, PS Survivor Space]
name: PS MarkSweep count:0 took:0 pool name:[PS Eden Space, PS Survivor Space, PS Old Gen]
===================================================================================================
init: 192MB max: 2708MB used: 249MB committed: 624MB use rate: 39%
init: 2MB max: 0MB used: 6MB committed: 7MB use rate: 78%
name: PS Scavenge count:32 took:98 pool name:[PS Eden Space, PS Survivor Space]
name: PS MarkSweep count:0 took:0 pool name:[PS Eden Space, PS Survivor Space, PS Old Gen]
===================================================================================================
Process finished with exit code -1
关注{bugstack虫洞栈}公众号获取源码
内容总结
以上是互联网集市为您收集整理的基于JavaAgent的全链路监控四《JVM内存与GC信息》全部内容,希望文章能够帮你解决基于JavaAgent的全链路监控四《JVM内存与GC信息》所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。