zoukankan      html  css  js  c++  java
  • 线上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的问题,你就去调优一下,你就可以基于这个压测的例子去说了。

  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/c-xiaohai/p/12489640.html
Copyright © 2011-2022 走看看