zl程序教程

您现在的位置是:首页 >  后端

当前栏目

JVM 调优实战--一个案例理解常用工具(命令)

JVM案例命令 一个 -- 实战 理解 调优
2023-09-14 09:01:56 时间

测试代码

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 从数据库中读取信用数据,套用模型,并把结果进行记录和传输
 */

public class T15_FullGC_Problem01 {

    private static class CardInfo {
        BigDecimal price = new BigDecimal(0.0);
        String name = "张三";
        int age = 5;
        Date birthdate = new Date();

        public void m() {}
    }

    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<CardInfo> taskList = getAllCardInfo();
        taskList.forEach(info -> {
            // do something
            executor.scheduleWithFixedDelay(() -> {
                //do sth with info
                info.m();

            }, 2, 3, TimeUnit.SECONDS);
        });
    }

    private static List<CardInfo> getAllCardInfo(){
        List<CardInfo> taskList = new ArrayList<>();

        for (int i = 0; i < 100; i++) {
            CardInfo ci = new CardInfo();
            taskList.add(ci);
        }

        return taskList;
    }
}
  1. java -Xms200M -Xmx200M com.mashibing.jvm.gc.T15_FullGC_Problem01

  2. top命令观察到问题:内存不断增长 CPU占用率居高不下

  3. jps定位具体java进程

  4. jinfo pid

  5. jstat -gc 动态观察gc情况 / 阅读GC日志发现频繁GC / arthas观察 / jconsole jstat -gc 4655 500 : 每个500个毫秒打印GC的情况

  6. jmap - histo 4655 | head -20,查找有多少对象产生

  7. jmap -dump:format=b,file=xxx pid / jmap -histo

  8. java -Xms20M -Xmx20M -XX:+UseParallelGC -XX:+HeapDumpOnOutOfMemoryError com.mashibing.jvm.gc.T15_FullGC_Problem01

  9. 使用MAT / jhat进行dump文件分析 https://www.cnblogs.com/baihuitestsoftware/articles/6406271.html

  10. 找到代码的问题