jvm调优

JVM调优目前总结的模版

匿名 (未验证) 提交于 2019-12-03 00:13:02
小于32G的机器,总结的GC调优参考模版: -Xms4096M -Xmx4096M -Xmn3072M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFaction=92 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSParallelInitialMarkEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -XX:+PrintGCDetails -Xloggc:gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/demo1/oom -Xms4096M:初始化堆内存大小 -Xmx4096M:最大堆内存大小 -Xmn3072M:新生代堆内存大小 -Xss1M:设置单个线程栈大小 -XX:MetaspaceSize=256M:元空间内存大小 -XX:MaxMetaspaceSize=256M:最大元空间内存大小, 各个内存区域的大小分配

jvm参数调优

匿名 (未验证) 提交于 2019-12-03 00:01:01
Jvm常用参数 --------------------------------------- 堆内存 = 年轻代+老年代 年轻代 = Eden+Survivor Survivor = From Space+To Space --------------------------------------- 年轻代 = Eden+From Space+To Space 堆内存=Eden+From Space+To Space+老年代 ==================================== -Xms2048m,初始堆大小,建议<物理内存的1/4,默认值为物理内存的1/64---- -Xmx2048m,最大堆大小,建议与-Xms保持一致,默认值为物理内存的1/4 -Xmn512m,新生代大小,建议不超过堆内存的1/2 -Xss256k,线程堆栈大小,建议256k -XX:PermSize=256m,永久代初始值,默认值为物理内存的1/64 -XX:MaxPermSize=256m,永久代最大值,默认值为物理内存的1/4 -XX:SurvivorRatio=8:年轻带中Eden区和Survivor区的比例,默认为8:1,即Eden(8),From Space(1),ToSpace(1) -XX:MaxTenuringThreshold=15:晋升到老年代的对象年龄

JVM参数配置&amp;&amp;命令工具

匿名 (未验证) 提交于 2019-12-02 23:57:01
大致方向:JVM调优的目的是保证在 一定吞吐量 的情况下尽可能的 减少GC次数 ,从而减少系统停顿时间,提高服务质量和效率。 其中减少GC次数的原则: 将新生代转换成老年代的数量降至最少(及时进行Minor GC回收新生代) 减少Full GC 次数 -XX:+PrintGCDetails:打印GC的详细信息(冒号之后的+表示打印,-表示不打印) -XX:+UseSerialGC : 使用串行回收器 -Xmx4000m :指定堆最大值为4000M( 等价于-XX:MaxHeapSize)。默认物理内存的1/4 -Xms4000m :指定堆初始化值为4000M( 等价于-XX:initialHeapSize)。默认物理内存的1/64 -Xmn2000m :设置新生代大小为2000M。 -Xss512k:设置栈大小为512k -Xmx :指定堆最大值。默认物理内存的1/4 -Xms :指定堆初始化值。默认物理内存的1/64 推荐:通常会将 -Xmx 与 -Xms两个参数配置成相同的值 public class Main { /** *堆内存大小配置 * -Xmx4000m 设置最大堆内存为4000m * -Xms4000m 设置初始化堆内存为4000m * @param args */ public static void main(String[] args) { System

JVM调优总结

人盡茶涼 提交于 2019-12-02 23:49:29
目录 数据类型 堆与栈 Java对象的大小 引用类型 按照基本回收策略分 按分区对待的方式分 按系统线程分 如何区分垃圾 如何处理碎片 如何解决同时存在的对象创建和对象回收问题 为什么要分代 如何分代 什么情况下触发垃圾回收 分代垃圾回收流程示意 选择合适的垃圾收集算法 小结 回收器选择 辅助信息 常见配置汇总 调优总结 垃圾回收的瓶颈 增量收集的演进 Garbage Firest(G1) 展望 JVM调优工具 如何调优 线程监控 内存泄漏检查 垃圾回收的悖论 我们的内存中都放了什么 解决之道 转载: JVM调优总结(一)-- 一些概念 转载: JVM调优总结(二)-- 一些概念 转载: JVM调优总结(三)-- 基本垃圾回收算法 转载: JVM调优总结(四)-- 垃圾回收面临的问题 转载: JVM调优总结(五)-- 分代垃圾回收详述1 转载: JVM调优总结(六)-- 分代垃圾回收详述2 转载: JVM调优总结(七)-- 典型配置举例1 转载: JVM调优总结(八)-- 典型配置举例2 转载: JVM调优总结(九)-- 新一代的垃圾回收算法 转载: JVM调优总结(十)-- 调优方法 转载: JVM调优总结(十一)-- 反思 一些概念 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身

JVM的参数以及作用详解

匿名 (未验证) 提交于 2019-12-02 23:49:02
-XX:+PrintGCDetails 打印GC的详细日志,并且在程序运行结束是会打印出JVM的内存占用情况 -XX:+PrintGCDateStamps 打印GC发生的时间 -Xloggc:d:\\gc.log gc日式默认是打印在控制台,添加这个参数可以指定GC日志的输出位置,指定后控制台就无法查看GC日志了 -XX:+TraceClassLoading 监控类的加载 -Xmx 指定最大堆内存 -Xmn 设置新生代大小 -XX:NewRatio 新生代(eden+2*s)和老年代(不包含永久区)的比值 4 表示 新生代:老年代=1:4,即年轻代占堆的1/5 -XX:SurvivorRatio 设置两个Survivor区和eden的比 8表示 两个Survivor :eden=2:8,即一个Survivor占年轻代的1/10 -XX:+HeapDumpOnOutOfMemoryError OOM时导出堆到文件 -XX:HeapDumpPath=d:/a.dump 导出OOM的路径 -XX:OnOutOfMemoryError 在OOM时,执行一个脚本"-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p“当程序OOM时,在D:/a.txt中将会生成线程的dump可以在OOM时,发送邮件,甚至是重启程序 XX

jvm参数调优

匿名 (未验证) 提交于 2019-12-02 23:05:13
13 1 eden 2 3 s1 2 堆初始值 堆最大可用值 -Xmn 新生代最大可用值 一般为堆大小的1/3或者1/4 -XX:SurvivorRatio 设置新生代中eden空间和from/to空间的比例 -XX:SurvivorRatio=eden/from=eden/to -XX:NewRatio 设置老年代和新生代比例 -XX:NewRatio=老年代/新生代 1 2 3 1:31:41/31/4 // 3:1 -Xms20m -Xmx20m -XX:SurvivorRatio=8 -XX:NewRatio=3 -XX:+PrintGCDetails -XX:+UseSerialGC package com.linxi.jia; /** * Created by 156 on 2019/2/13. */ public class JvmDemo02 { // public static void main(String[] args) { //-Xms20m -Xmx20m -XX:SurvivorRatio=8 -XX:NewRatio=3 -XX:+PrintGCDetails -XX:+UseSerialGC byte [] b = null; for (int i = 0; i < 2; i++) { b =new byte[1*1024*1024]; } } }

Java调优经验谈

匿名 (未验证) 提交于 2019-12-02 21:53:52
对于调优这个事情来说,一般就是三个过程: 性能监控:问题没有发生,你并不知道你需要调优什么?此时需要一些系统、应用的监控工具来发现问题。 性能分析:问题已经发生,但是你并不知道问题到底出在哪里。此时就需要使用工具、经验对系统、应用进行瓶颈分析,以求定位到问题原因。 性能调优:经过上一步的分析定位到了问题所在,需要对问题进行解决,使用代码、配置等手段进行优化。 Java调优也不外乎这三步。 此外,本文所讲的性能分析、调优等是抛开以下因素的: 系统底层环境:硬件、操作系统等 数据结构和算法的使用 外部系统如数据库、缓存的使用 调优准备 调优是需要做好准备工作的,毕竟每一个应用的业务目标都不尽相同,性能瓶颈也不会总在同一个点上。在业务应用层面,我们需要: 需要了解系统的总体架构,明确压力方向。比如系统的哪一个接口、模块是使用率最高的,面临高并发的挑战。 需要构建测试环境来测试应用的性能,使用ab、loadrunner、jmeter都可以。 对关键业务数据量进行分析,这里主要指的是对一些数据的量化分析,如数据库一天的数据量有多少;缓存的数据量有多大等 了解系统的响应速度、吞吐量、TPS、QPS等指标需求,比如秒杀系统对响应速度和QPS的要求是非常高的。 了解系统相关软件的版本、模式和参数等,有时候限于应用依赖服务的版本、模式等,性能也会受到一定的影响。 此外

jvm 性能调优工具之 jmap

岁酱吖の 提交于 2019-12-02 21:42:54
概述 命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。 jmap 用法 参数: option: 选项参数。 pid: 需要打印配置信息的进程ID。 executable: 产生核心dump的Java可执行文件。 core: 需要打印配置信息的核心文件。 server-id 可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。 remote server IP or hostname 远程调试服务器的IP地址或主机名。 option no option: 查看进程的内存映像信息,类似 Solaris pmap 命令。 heap: 显示Java堆详细信息 histo[:live]: 显示堆中对象的统计信息 clstats: 打印类加载器信息 finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象 dump:<dump-options>: 生成堆转储快照 F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效. help: 打印帮助信息 J<flag>: 指定传递给运行jmap的JVM的参数 示例一:no option 命令

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解 转至元数据结尾

不打扰是莪最后的温柔 提交于 2019-12-02 18:16:06
OutOfMemoryError,内存不足 内存容量 螺纹死锁 锁争用(锁争用) Java进程消耗CPU过高 A,jps(Java虚拟机进程状态工具) jps主要用于输出JVM中运行的进程状态信息。语法格式如下: jps [选项] [主机ID] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: -q不输出类名,Jar名和纳入主方法的参数 -m输出预设主方法的参数 -l输出main类或Jar的全限名 -v输出JVM的参数 例如下面: root @ ubuntu:/#jps -m -l 2458 org.artifactory.standalone.main.Main /usr/local/artifactory-2.2.5/etc/jetty.xml 29920 com.sun.tools.hat.Main主端口9998 /tmp/dump.dat 3149 org.apache.catalina.startup.Bootstrap启动 30972 sun.tools.jps.Jps -m -l 8247 org.apache.catalina.startup.Bootstrap启动 25687 com.sun.tools.hat.Main-端口9999 dump.dat 21711 mrf-center.jar B,jstack

JVM学习

谁都会走 提交于 2019-12-02 13:43:22
      一、程序计数器    记住下一条jvm指令的执行地址,解释器会去程序计数器拿jvm指令。   线程私有的 ,CPU会给每个线程分配时间片,时间片执行完会切换线程。    唯一不会出现内存溢出的区域。 二、虚拟机栈    线程运行需要的内存空间,每个线程都有一个栈。    由多个栈帧组成,每个方法运行需要的内存(参数、局部变量、返回值),先入后出。    每个线程只能有一个活动栈帧,就是正在执行的方法。    垃圾回收不涉及栈内存。    栈内存参数:-Xss 1024k。 栈内存变大,总线程就会变少。     方法内的局部变量如果没有逃离方法的作用范围,则是线程安全的。    栈内存溢出错误: StackOverflowError     案例 :     ( 一 )CPU占用过高        1、查看所有进程的cpu占用率,获取哪个进程占用cpu最高: top 。       2、查看某个进程的那个线程占用cpu最高: ps H -eo pid,tid,%cpu | grep ${pid} 。       3、查看某个进程的所有线程详细信息: jstack ${pid} 。 三、本地方法栈    本地方法运行使用的内存,例如object.clone(),被 native 修饰的。 四、堆(heap)    通过new创建的对象都会放在堆中,线程共享的,有垃圾回收机制