启动命令

  • 格式: java -jar 命令行参数 jar包路径 。示例如下
java -Dfile.encoding=utf-8 -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms512m -Xmx1024m -Xmn128m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC d:\\lidar-app\\lidar-web-server.jar

java -Dfile.encoding=utf-8 -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms512m -Xmx1024m -Xmn128m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC d:\\lidar-app\\lidar-service-provider.jar

相关命令行参数说明

  1. -Dfile.encoding=utf-8 强行设置系统文件编码为utf-8 ,一般不配置,估计开发有问题,所以启动时强制设置了一下。
  2. -XX:MetaspaceSize=128m 扩容时触发FullGC的初始化阈值,也是最小阈值 如果不设置就是21807104 设多大为好通过服务启动后,MU (jstat -gc pid)的值来定
  3. -XX:MaxMetaspaceSize=128m 就是第2个参数的最大值 ,如果太小会频繁的FullGC 甚至OOM 设多大为好,g一般MetaspaceSize和MaxMetaspaceSize设置一样大,建议运行稳定一段时间后通过(jstat -gc pid)设置的大一点

  1. -Xms512m 初始堆的大小一般设置和-Xmx 以避免每次垃圾回收完成后JVM重新分配内存
  2. -Xmx1024m 设置JVM最大可用的内存为多少
  3. -Xmn128m 设置年轻代的大小,官方推荐为整个堆的3/8,通常设置为1/3或1/4
  4. -Xss256k 设置每个线程堆栈的大小,意思就是内存一定的条件下,这个值越小生成的线程越多,但是一个进程的线程是有限制的3k-5k左右

  1. -XX:SurvivorRatio=8 设置年轻代中Eden区与Survivor区的大小比值 ,注意Survivor有两个区域From 和To ,需要注意的如果设置了-XX:MaxTenuringThreshold=0(即多大年龄为老年,为0就是直接算老年,不会过Surviror区),看经验和情况设置

  1. -XX:+UseConcMarkSweepGC 并发收集器主要是保证系统的响应时间,减少垃圾收集时的停顿时间 适用于多CPU JVM在server模式下默认使用PararrelScavenge+SerialOld的收集器组合进行内存回收,不支持与用户线程并发执行。可使用ParNew+CMS+SerialOld的收集器组合进行内存回收(SerialOld收集器做为CMS收集器出现ConcurrentModeFailure失败后的后备收集器使用),减少stop-the-world时间。

调优总结

1. 年轻代大小选择

响应时间优先的应用:尽可能设大,直到接近系统的最低响应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。

吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用。

2. 年老代大小选择

  1. 响应时间优先的应用

    年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率和会话持续时间等一些参数。如果堆设置小 了,可以会造成内存碎片、高回收频率以及应用暂停而使用传统的标记清除方式;如果堆大了,则需要较长的收集时 间。最优化的方案,一般需要参考以下数据获得:
  • 并发垃圾收集信息
  • 持久代并发收集次数
  • 传统GC信息
  • 花在年轻代和年老代回收上的时间比例

    减少年轻代和年老代花费的时间,一般会提高应用的效率

2.吞吐量优先的应用

一般吞吐量优先的应用都有一个很大的年轻代和一个较小的年老代。原因是,这样可以尽可能回收掉大部分短期对象,减少中期的对象,而年老代尽存放长期存活对象。

3. 较小堆引起的碎片问题

因为年老代的并发收集器使用标记、清除算法,所以不会对堆进行压缩。当收集器回收时,他会把相邻的空间进行合并,这样可以分配给较大的对象。但是,当堆空间较小时,运行一段时间以后,就会出现“碎片”,如果并发收集器找不到足够的空间,那么并发收集器将会停止,然后使用传统的标记、清除方式进行回收。如果出现“碎片”,可能需要进行如下配置:

  • -XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩。
  • -XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩

引用:

https://www.cnblogs.com/likehua/p/3369823.html

JVM 启动调优总结的更多相关文章

  1. JVM 调优之 Eclipse 启动调优实战

    本文是我12年在学习<深入理解Java虚拟机:JVM高级特性与最佳实践>时,做的一个 JVM 简单调优实战笔记,版本都有些过时,不过调优思路和过程还是可以分享给大家参考的. 环境基础配置 ...

  2. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

    摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...

  3. JVM参数调优

    JVM参数调优 JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,d ...

  4. Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述

    概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代, ...

  5. JVM性能调优

    摘自:http://uule.iteye.com/blog/2114697 JVM垃圾回收与性能调优总结 JVM调优的几种策略 一.JVM内存模型及垃圾收集算法  1.根据Java虚拟机规范,JVM将 ...

  6. JVM 性能调优实战之:一次系统性能瓶颈的寻找过程

    玩过性能优化的朋友都清楚,性能优化的关键并不在于怎么进行优化,而在于怎么找到当前系统的性能瓶颈.性能优化分为好几个层次,比如系统层次.算法层次.代码层次…JVM 的性能优化被认为是底层优化,门槛较高, ...

  7. JVM 性能调优实战之:使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码

    本文是<JVM 性能调优实战之:一次系统性能瓶颈的寻找过程> 的后续篇,该篇介绍了如何使用 JDK 自身提供的工具进行 JVM 调优将 TPS 由 2.5 提升到 20 (提升了 7 倍) ...

  8. JVM的GC机制及JVM的调优方法

    内存管理和垃圾回收是JVM非常关键的点,对Java性能的剖析而言,了解内存管理和垃圾回收的基本策略非常重要. 1.在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的 ...

  9. jvm 性能调优

    [转载]:http://blog.csdn.net/chen77716/article/details/5695893 最近因项目存在内存泄漏,故进行大规模的JVM性能调优 , 现把经验做一记录. 一 ...

随机推荐

  1. airflow的安装

    1.环境准备1.1 安装环境1.2 创建用户2.安装airflow2.1 安装python2.2 安装pip2.3 安装数据库2.4 安装airflow2.4.1 安装主模块2.4.2 安装数据库模块 ...

  2. windows下zookeeper安装和使用

    一,下载 可以到官网下载 官方主页: https://zookeeper.apache.org/ 二,安装 解压即可 三,配置 需要java环境,在加压出来的文件夹中找到zoo_sample.cfg文 ...

  3. Flutter学习笔记(27)--数据共享(InheritedWidget)

    如需转载,请注明出处:Flutter学习笔记(27)--数据共享(InheritedWidget) InheritedWidget是Flutter中非常重要的一个功能型组件,它提供了一种数据在widg ...

  4. RxSwift 中的调度器

    与 ReactiveCocoa 相比,Rx 的一大优势就是更丰富的并发模型.提到并发,就不得不提多线程.在 RxSwift 中,与线程对应的概念就是调度器,本文就调度器做些介绍,包括并发调度器.串行调 ...

  5. 从零开始用golang创建一条简单的区块链

    区块链(Blockchain),是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息 ...

  6. 欢迎加入强哥的 Android 开发交流群

    最近建了一个 Android 开发交流群,但不限于交流移动端.前端和后端等相关技术. 本群的宗旨:让所有学习的群友都有进步的机会. 1. 经验交流 在我们学习时遇到困境,或者开发过程中遇到难题,都可以 ...

  7. C# 事件 Event

    一.事件是什么 微软的定义:和委托类似,事件是后期绑定机制. 实际上,事件是建立在对委托的语言支持之上的.事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式. 任何其他组件都可以订阅事件 ...

  8. VMware CentOS7 安装

    一.软硬件准备 作者:小啊博 QQ:762641008 转载请声明:https://www.cnblogs.com/-bobo 1.准备Centos7镜像 软件:推荐使用VMwear,我用的是VMwe ...

  9. 性能测试的基础知识--QPS和TPS

    基本概念: QPS:Queries Per Second意思是“每秒查询率” ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS:Transa ...

  10. 非对称加密openssl协议在php7实践

    据网上资料,RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商务中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(RON RIVEST).阿迪·萨莫尔(ADI SHAMIR)和伦纳德· ...