• 线上jvm如何配置的?


    1、这里采用4核8g的机器

    -server -Xms4g -Xmx4g -Xss256k

    -XX:PermSize=512m

    -XX:MaxPermSize=512m

    -XX:MaxTenuringThreshold=20
    -XX:CMSInitiatingOccupancyFraction=80

    -XX:+UseCMSInitiatingOccupancyOnly

    -XX:+HeapDumpOnOutOfMemoryError

    -XX:HeapDumpPath=/path/heap/dump.hprof

    -XX:+PrintGCTimeStamps

    -XX:+PrintGCDeatils

    -XX:+PrintGCDeatils -Xloggc:<filename>

    解释:

    -server:必须得加,因为你是服务端程序,用-server启动较慢,但是启动后性能会更好

    -Xms4g:堆内存的初始大小是4g,一般我们线上常用的普通应用系统是48G的虚拟机,足够了,所以一般堆内存给4g,稍微留点富裕,毕竟操作系统自己也要用内存的

    -Xmx4g:堆内存的最大大小是4g,一般就是跟初始大小是一样的,一般不建议设置比-Xms4g大,因为导致运行时动态增加堆内存,会有问题

    -Xss256k:每个线程使用栈内存大小,这个一般设置成256k就差不多够了,毕竟主要内存都是放堆里的,栈里就是一些变量什么的

    -XX:PermSize=512m,这是永久代大小,这是放加载的类之类的东西的,一般设置512m是足够了,太小了,有的时候在就是那种动态生成字节码的场景下,可能会有问题

    -XX:MaxPermSize=512m,这就是永久代的最大大小,一般就跟上面那个一样就行了

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/heap/dump.hprof 出现oom的时候,把指定java进程的堆内存快照搞到一个指定的文件里去

    -XX:+PrintGCTimeStamps-XX:+PrintGCDeatils-XX:+PrintGCDeatils -Xloggc:<filename> 让线上系统定期打出来gc的日志,如果发现线上系统经常卡顿,可以立即去查看gc日志

    -XX:MaxTenuringThreshold=20:这个就是说新生代里多少次没回收掉就进入老年代

    -XX:CMSInitiatingOccupancyFraction=80,设置老年代占用多大比例后触发cms垃圾回收

    -XX:+UseCMSInitiatingOccupancyOnly,这个跟上面那个参数配合起来使用,就是说仅仅使用上面指定的那个比例,否则不指定这个参数,jvm第一次使用上面那个比例后,后续会自动调整那个比例

    2、尽可能的去调优一下jvm参数后,去压测调节的参数进行内存使用数据分析

    发现分析了一下生产环境的jvm的运行情况,非常好,并发量很低,几十分钟才一次young gc,存活的对象特别少,几乎都在s区域,老年代几乎没什么对象,几天或者几周才发生一次full gc。

    在自己本地单机部署,测试环境里,去压测,每秒单机有500并发请求,去观察jvm的运行情况,这个时候他会不会存在频繁gc的问题,你就去调优一下,你就可以基于这个压测的例子去说了。

  • 相关阅读:
    TypeScript 基本数据类型
    TypeScript 一个面向对象的JavaScript
    Express 路由Router
    Node.js 自启动工具(supervisor 和 nodemon )
    Node.js Express WEB框架
    Node.js 文件操作
    Node.js回调函数和事件循环机制
    HashMap原理
    mybatis动态sql(常用)
    MySQL知识点
  • 原文地址:https://www.cnblogs.com/c-xiaohai/p/12489640.html
Copyright © 2020-2023  润新知