JVM 参数类型

2018-10-31  本文已影响0人  磊_5d71

文档查看地址 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/toc.html

图片.png

默认 java -version 为混合模式


图片.png
图片.png
图片.png 图片.png 图片.png

java -XX:+PrintFlagsFinal -version > flags.txt
sz flags.txt 将文件拿到本地

jstat查看JVM统计信息

图片.png

Loaded加载的类的个数 bytes 占用的字节数 unloaded 卸载的类的个数 times花费的时间

jmap +MAT实战内存溢出

start.spring.io

-Xmx32M -Xms32M 设置最大内存和最小内存

package com.alan.springbootdemo3.controller;


import com.alan.springbootdemo3.entity.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;


//相当于@Controller 和@ResponseBody两个注解的组合
@RestController
public class MemoryCcontroller {


    private List<User> users =  new ArrayList<>();


    /**
     * -Xmx32M -Xms32M 设置最大内存和最小内存
     * @return
     */
    @GetMapping("/heap")
    public String heap(){
        int i = 0;
        while (true){
            users.add(new User(i++, UUID.randomUUID().toString()));
        }
    }

}

导出内存映像文件

图片.png

jmap -dump:format=b,file=heap.hprof 进程id

通过MAT工具分析内存溢出

图片.png 图片.png

jstack实战死循环和死锁

jstack 进程id
配合top查看cpu 情况 根据堆栈信息找到有问题的方法

    /**
     * 死锁
     * */
    @RequestMapping("/deadlock")
    public String deadlock(){
        new Thread(()->{
            synchronized(lock1) {
                try {Thread.sleep(1000);}catch(Exception e) {}
                synchronized(lock2) {
                    System.out.println("Thread1 over");
                }
            }
        }) .start();
        new Thread(()->{
            synchronized(lock2) {
                try {Thread.sleep(1000);}catch(Exception e) {}
                synchronized(lock1) {
                    System.out.println("Thread2 over");
                }
            }
        }) .start();
        return "deadlock";
    }
com.alan.springbootdemo3.chapter2.CpuController.lambda$deadlock$0(CpuController.java:33)
    - waiting to lock <0x0000000744ad3408> (a java.lang.Object)
    - locked <0x0000000744ad33f8> (a java.lang.Object)
    at com.alan.springbootdemo3.chapter2.CpuController$$Lambda$148/1545477220.run(Unknown Source)
    at java.lang.Thread.run(java.base@10.0.2/Thread.java:844)
"Thread-4":
    at com.alan.springbootdemo3.chapter2.CpuController.lambda$deadlock$1(CpuController.java:41)
    - waiting to lock <0x0000000744ad33f8> (a java.lang.Object)
    - locked <0x0000000744ad3408> (a java.lang.Object)
    at com.alan.springbootdemo3.chapter2.CpuController$$Lambda$149/1478591295.run(Unknown Source)
    at java.lang.Thread.run(java.base@10.0.2/Thread.java:844)

Found 1 deadlock.
上一篇 下一篇

猜你喜欢

热点阅读