【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿

//小农的银行卡信息记录

BigDecimal price = new BigDecimal(10000000.0);

String name = “牧小农”;

int age = 18;

Date birthdate = new Date();

public void m() {}

}

//线程池 定时线程池

//50个,然后设置 拒绝策略

private static ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(50,

new ThreadPoolExecutor.DiscardOldestPolicy());

public static void main(String[] args) throws Exception {

executor.setMaximumPoolSize(50);

for (;😉{

modelFit();

Thread.sleep(100);

}

}

/**

  • 对银行卡进行风险评估

*/

private static void modelFit(){

List taskList = getAllCardInfo();

//拿出每一个信息出来

taskList.forEach(info -> {

// do something

executor.scheduleWithFixedDelay(() -> {

//调用M方法

info.m();

}, 2, 3, TimeUnit.SECONDS);

});

}

private static List getAllCardInfo(){

List taskList = new ArrayList<>();

//每次查询100张卡出来

for (int i = 0; i < 100; i++) {

CardInfo ci = new CardInfo();

taskList.add(ci);

}

return taskList;

}

}

程序的设计其实比较简单,就是我们用信用卡的案例来进行说明,比如CardInfo就是信用卡类,我们把这个人对应的信用卡的记录都调用出来,之后做一些自己响应的业务处理方法来对它进行处理和计算,来看看我们这个模型是否符合modelFit,具体怎么做呢,在应用程序中有一个类是CardInfo,有一个方法叫做getAllCardInfo,每次都是拿100个出来,拿100个之后用线程池做计算,线程池用的是ScheduledThreadPoolExecutor (定时任务),new出来线程池之后,50个线程池,然后做对应的业务逻辑处理,会调用 modelFit(),使用100毫秒模拟业务的停顿。

首先我们需要使用javac 命令将Java文件进行编译

javac FullGCTest.java进行编译,然后打印GC日志,进行风险监控

打印GC日志:java -Xms200M -Xmx200M -XX:+PrintGC FullGCTest

在这里插入图片描述

怎么知道JVM内存过高?


在公司里面,如果遇到了JVM内存过高的情况,那么一般是运维团队首先受到报警信息,然后通知对应的开发人员去查看,那么开发人员应该如何查看,或者怎么样去排查呢?

1、top 查看进程

受到报警信息后,拿top命令去查询

[root@root ~]# top

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值