工具

作者: 南园故剑00 | 来源:发表于2020-08-31 19:25 被阅读0次
package com.msb;

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;

/**
 * @description:
 * @date : 2020/8/12 21:12
 * @author: zwz
 */
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;
    }


}

GC日志



1. JPS定位到PID

2. jstack


jstack 定位线程状况,重点关注:WAITING BLOCKED
eg.
waiting on <0x0000000088ca3310> (a java.lang.Object)
假如有一个进程中100个线程,很多线程都在waiting on <xx> ,一定要找到是哪个线程持有这把锁
怎么找?搜索jstack dump的信息,找<xx> ,看哪个线程持有这把锁RUNNABLE

死锁检测

package com.lg;

/**
 * @description: 互斥条件、请求与保持条件、不剥夺条件、循环等待条件
 * @date : 2020/7/27 11:31
 * @author: zwz
 */
public class MustDeadLock implements Runnable {

    public int flag;
    static final Object o1 = new Object();
    static final Object o2 = new Object();

    @Override
    public void run() {
        System.out.println("线程" + Thread.currentThread().getName() + "的flag为" + flag);
        if (flag == 1) {
            synchronized (o1) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (o2) {
                    System.out.println("线程1获得了两把锁");
                }
            }
        }

        if (flag == 2) {
            synchronized (o2) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (o1) {
                    System.out.println("线程2获得了两把锁");
                }
            }
        }
    }

    public static void main(String[] args) {
        MustDeadLock lock = new MustDeadLock();
        MustDeadLock lock2 = new MustDeadLock();
        lock.flag = 1;
        lock2.flag = 2;

        Thread t1 = new Thread(lock, "t1");
        Thread t2 = new Thread(lock2, "t2");
        t1.start();
        t2.start();
    }
}

3 jinfo PID

4. arthas

  • JVM


  • 确定jar包加载路径


  • 代码反编译


  • 线上debug:watch



    watch demo.MathGame primeFactors "{params,target,returnObj,throwExp}" -x 2 -n 2


  • sm 查找方法


  • sc 查找类


  • readline 重新写java并编译成class。运行时替换class


  • 原理:
    字节码 AOP spring aop jvm级别 java agent 热部署jrebel

jmap 查找有多少对象产生

  • 线上系统,内存特别大,jmap执行期间会对进程产生很大影响,甚至卡顿(电商不适合)
    1:设定了参数HeapDump,OOM的时候会自动产生堆转储文件(不是很专业,因为多有监控,内存增长就会报警)
    2:<font color='red'>很多服务器备份(高可用),停掉这台服务器对其他服务器不影响</font>
    3:在线定位(一般小点儿公司用不到)
    4:在测试环境中压测(产生类似内存增长问题,在堆还不是很大的时候进行转储)
  • 堆转储文件




jstat

jhat


相关文章

  • 工具工具还是工具

    最近几天参加了一个数据分析的训练营,每天晚上8点钟开始,一直讲到10点多,老师很卖力,干货也很多。今天结营,就在这...

  • 2019-01-08 ps总结

    ps 抠图工具 套索工具 多边套索工具 文字工具 磁性套索工具 魔棒工具 渐变工具 蒙版 图章工具 alt 吸取颜...

  • 【工具箱-2-选区工具】

    【工具箱-2-选区工具】 【矩形选框工具组:】矩形选框工具、椭圆选框工具、单行选框工具、单列选框工具。 个人理解:...

  • AI 2019 Mac版常用快捷键大全

    移动工具:V 选取工具:A 钢笔工具:P 添加锚点工具:+ 删除锚点工具:- 文字工具:T 多边形工具:L 矩形、...

  • PS扣图

    1扣图工具 套索工具 多边套索工具 磁性套索工具 快速选择工具 魔棒工具 橡皮擦工具 背景橡皮擦工具 魔术橡皮擦工...

  • AI热键

    选择工具:v 直接选择工具:a 魔棒工具:y 套索工具:q 钢笔工具:p 转换描点工具:Ctrl+c 文字工具:t...

  • 工具?工具人?

    很多时候,我们发明工具的目的是方便工作,结果,适得其反,不仅没有方便,反而增添了工作量。原来往上级交个什么东西,都...

  • 工具的工具

    “一个人越是能够放弃一些东西,越是富有。”-《瓦尔登湖》 当人真正占有一些东西的时候,就成了它们的奴隶,尤其是那些...

  • 去觉知去用你的工具

    去觉知去用你的工具 在空性里, 身体是工具 思想是工具 情绪是工具 情感是工具 人性是工具 …… 发现这些工具 去...

  • 《人生效率手册》读书复盘14

    新知: 选择和使用工具数使用工具=实践 计划工具、总结工具、学习工具、反思工具 学习工具包括:读书笔记,演讲笔记社...

网友评论

      本文标题:工具

      本文链接:https://www.haomeiwen.com/subject/idnssktx.html