• JVM调优随笔


    本文记载了个人对JVM调优的一些个人使用经验,进来既有缘,希望对看到的朋友有所帮助


    一、命令和工具的使用:
    1 查看系统启动的java线程: jps -l

    2 动态添加gc日志参数:
    3 添加gc详细日志:jinfo -flag +PrintGCDetails 线程id
    4 添加内存溢出自动导出堆信息:+HeapDumpOnOutOfMemoryError

    5 堆信息导出: jmap -dump:live,format=b,file=heap.bin 17956
    6 用:elipse的 MAT工具进行分析
    7 堆信息查看工具:jstack 线程ID


    二、当发现程序启动比较慢的时候,觉得需要进行jvm参数调整则步骤如下:
    1、 开启日志分析 -XX:+PrintGCDetails 发现有多次 GC 包括 FullGC
    2、 发现GC日志多次对方法区进行GC,则可能是空间不足
    调整 Metadata 空间 -XX:MetaspaceSize=64m 减少 FullGC
    3、 YGC次数频繁
    减少 Minorgc 次数,增加参数 -Xms500m GC 减少至 5 次(如果觉得还是多,则继续增加内存值)
    4、 YGC次数调整
    增加新生代比重,增加参数 -Xmn900mGC 减少至 1 次
    5、堆栈内存值还可以继续增加,但是效果不明显的话,数值需要自己衡量
    加大新生代,调整参数 -Xms2000m -Xmn1800m 还是避免不了 GC,没有必要调整这么大,资源浪费
    6、设置的例子:-Xms5m-Xmx5m-XX:+PrintGCDetails-XX:+UseSerialGC


    三、设置垃圾回收器
    -XX:+UseSerialGC
    -XX:+UseParNewGC
    -XX:+UseConcMarkSweepGC
    -XX:+UseG1GC

    四、GC调整原则
    GC 的时间够小
    GC 的次数够少
    发生 FullGC 的周期足够的长,时间合理,最好是不发生。
    注:如果满足下面的指标,则一般不需要进行 GC: MinorGC 执行时间不到 50ms;
    MinorGC 执行不频繁,约 10 秒一次;
    FullGC 执行时间不到 1s;
    FullGC 执行频率不算频繁,不低于 10 分钟 1 次;


    五、操作 响应时间统计:
    打开一个站点 几秒
    数据库查询一条记录(有索引) 十几毫秒
    机械磁盘一次寻址定位 4 毫秒
    从机械磁盘顺序读取 1M 数据 2 毫秒
    从 SSD 磁盘顺序读取 1M 数据 0.3 毫秒
    从远程分布式换成 Redis 读取一个数据 0.5 毫秒
    从内存读取 1M 数据 十几微妙
    Java 程序本地方法调用 几微妙
    网络传输 2Kb 数据 1 微妙
    并发数
    同一时刻,对服务器有实际交互的请求数。 和网站在线用户数的关联:1000 个同时在线用户数,可以估计并发数在 5%到 15%


    评估并发:并发=在线人数*15%

  • 相关阅读:
    C错误调试:当前不会命中断点。没有与此行关联的可执行代码
    将不同的数据写入不同的文件中
    UMFPACK调用的接口
    求解压力备份()
    用C++实现向量二范数
    编写参考文献的方法
    改写UMFPACK算例中的压缩方式(二)
    div文字多行展示,多出的文字用省略号代替
    Internet Explorer Developer Toolbar 中文
    (转帖)天下第七C#学习笔记(3)
  • 原文地址:https://www.cnblogs.com/lean-blog/p/13297431.html
Copyright © 2020-2023  润新知