有 JVM 调优经验
    根据需求进行 JVM 规划和预调优:
    优化运行 JVM 运行环境(慢,卡顿):
    解决 JVM 运行过程中出现的各种问题(OOM)
    命令:
    java -X 非标参数
    java -XX:+PrintFlagFinal -version
    定位
    我的 CPU 是 100%,怎么定位?频繁 FGC 三秒一次怎么定位?
    问题一:频繁 FGC,但是没有 OOM
    监控,报警——运维的人——
    top 命令查看使用情况
    模拟
    # 将最大堆和最小堆设置一样,防止抖动,资源应该给客户服务,而不应该浪费在扩容上
    # PrintGC :打印GC信息
    java -Xms20M -Xmx20M -XX:PrintGC com.xqc.demol
    八、JVM 调优 - 图1

    每次只回收了 1K,回收不掉,内存有泄漏,全占满了。
    图像化检测软件:
    上线了必须开放端口这些远程工具才能连上,增加了不安全性
    arthas 安装:阿里开源的
    命令:dashboard
    面试题一:如果一个 Java 进程,平时也就 50%,但是突然暴涨 90%,如何定位?
    阿里规约,线程的名称要有意义
    命令:Thread pid
    jmap -histo 1778 | head -20
    八、JVM 调优 - 图2

    这些对象在吃内存
    当然生产上不能用 jmap,除非测试环境中,或则高可用隔离其中一台,用其中一台给他测试,或则配置参数
    -XX:+HeapDumpOnOutOfMermoryError
    发生了 OOM 产生了堆存储文件
    使用 VisualVm 查看哪些类
    实例一:
    OOM 产生的原因多种多样,有些程序未必产生 OOM,不断 FGC(CPU 飙高,但内存回收特别少) (上面案例)

    1. 硬件升级系统反而卡顿的问题(见上)
    2. 线程池不当运用产生 OOM 问题(见上) 不断的往 List 里加对象(实在太 LOW)
    3. smile jira 问题 实际系统不断重启 解决问题 加内存 + 更换垃圾回收器 G1 真正问题在哪儿?不知道
    4. tomcat http-header-size 过大问题(Hector)

    实例二:
    finalize()方法:
    C++需要手动释放内存,Java 不需要,如果重写 finalize()方法,进行释放,Java 操作会很耗时,导致内存溢出。

    转载 https://www.yuque.com/jykss/jykss/qaomdf