一、jmap -heap PID

using parallel threads in the new generation.  ##新生代采用的是并行线程处理方式

using thread-local object allocation.

Concurrent Mark-Sweep GC   ##同步并行垃圾回收

Heap Configuration:  ##堆配置情况

MinHeapFreeRatio = 40 ##最小堆使用比例

MaxHeapFreeRatio = 70 ##最大堆可用比例

MaxHeapSize      = 2147483648 (2048.0MB) ##最大堆空间大小

NewSize          = 268435456 (256.0MB) ##新生代分配大小

MaxNewSize       = 268435456 (256.0MB) ##最大可新生代分配大小

OldSize          = 5439488 (5.1875MB) ##老生代大小

NewRatio         = 2  ##新生代比例

SurvivorRatio    = 8 ##新生代与suvivor的比例

PermSize         = 134217728 (128.0MB) ##perm区大小

MaxPermSize      = 134217728 (128.0MB) ##最大可分配perm区大小

Heap Usage: ##堆使用情况

New Generation (Eden + 1 Survivor Space):  ##新生代(伊甸区 + survior空间)

capacity = 241631232 (230.4375MB)  ##伊甸区容量

used     = 77776272 (74.17323303222656MB) ##已经使用大小

free     = 163854960 (156.26426696777344MB) ##剩余容量

32.188004570534986% used ##使用比例

Eden Space:  ##伊甸区

capacity = 214827008 (204.875MB) ##伊甸区容量

used     = 74442288 (70.99369812011719MB) ##伊甸区使用

free     = 140384720 (133.8813018798828MB) ##伊甸区当前剩余容量

34.65220164496263% used ##伊甸区使用情况

From Space: ##survior1区

capacity = 26804224 (25.5625MB) ##survior1区容量

used     = 3333984 (3.179534912109375MB) ##surviror1区已使用情况

free     = 23470240 (22.382965087890625MB) ##surviror1区剩余容量

12.43827838477995% used ##survior1区使用比例

To Space: ##survior2 区

capacity = 26804224 (25.5625MB) ##survior2区容量

used     = 0 (0.0MB) ##survior2区已使用情况

free     = 26804224 (25.5625MB) ##survior2区剩余容量

0.0% used ## survior2区使用比例

concurrent mark-sweep generation: ##老生代使用情况

capacity = 1879048192 (1792.0MB) ##老生代容量

used     = 30847928 (29.41887664794922MB) ##老生代已使用容量

free     = 1848200264 (1762.5811233520508MB) ##老生代剩余容量

1.6416783843721663% used ##老生代使用比例

Perm Generation: ##perm区使用情况

capacity = 134217728 (128.0MB) ##perm区容量

used     = 47303016 (45.111671447753906MB) ##perm区已使用容量

free     = 86914712 (82.8883285522461MB) ##perm区剩余容量

35.24349331855774% used ##perm区使用比例

jmap -histo:live强制执行了下full gc

二、JVM 优化的参数设

1、堆的大小可以通过 -Xms 和 -Xmx 来设置,一般将他们设置为相同的大小,目的是避免在每次垃圾回收后重新调整堆的大小,比如 -Xms=2g -Xmx=2g 或者 -Xms=512m -Xmx=512m

2、年轻代大小可以通过 -Xmn 来设置,比如-Xmn=2g 或者 -Xmn512m,此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8

3、年老代大小 = 堆大小 – 年轻代大小

4、持久代或者永久代大小可以通过 -XX:PermSize 和 -XX:MaxPermSize 来控制

5、-XX:SurvivorRatio 控制 Eden和Survivor的内存占用比例,默认为8

如果设置了NewRatio,那么整个堆空间的1/(NewRatio +1)就是新生代空间的大小,-XX:NewRatio推荐2到4.

如果同时指定了NewRatio和NewSize,你应该使用更大的那个。于是,当堆空间被创建时,你可以用过下面的表达式计算初始新生代空间的大小:

 
min(MaxNewSize, max(NewSize, heap/(NewRatio+1)))

 三、JVM内存溢出配置

    如何能在JVM遇到OOM错误的时候能够打印heap dump?可以设置-XX:+HeapDumpOnOutOfMemoryError参数,让JVM在探测到内存OOM的时候打印dump。但是在JVM启动参数添加这个参数的时候,JVM启动失败:Unrecognized VM option '+HeapDumpOnOutOfMemeryError' ,问题的原因是因为没有添加-XX:HeapDumpPath参数配置。-XX:HeapDumpPath这个参数可以设置dump文件的存放位置。将JVM启动参数设置成如下格式:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:/  

问题得到解决。当JVM发生内存溢出的时候,会在C:/下打印出heap dump

四、JVM调优经验

(1)调优前/后gc情况可以通过如下命令:jstat -gcutil <pid> 3000

minor gc: 3~6次/3秒

full gc: 1次/30秒

(2)常用参数设置

UseParNewGC表示对新生代采用并行gc;

ParallelGCThreads表示并行的线程数为8,一般是cpu的核个数,当核个数大于8时可能不是很适用;

UseConcMarkSweepGC表示对full gc采用CMS gc;

-XX:+DisableExplicitGC 表示禁止显式gc,System.gc()

-XX:+UseCMSCompactAtFullCollection 适用于CMS gc,表示在进行gc的同时清理内存碎片,但会加长gc的总时间

-XX:CMSInitiatingOccupancyFraction=80 适用于CMS gc,表示在年老代达到80%使用率时马上进行回收

在JVM Crash时获heap信息的一些配置参数:

-XX:ErrorFile=./xxx.log   JVM Crash时记录heap信息

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./yyy.log JVM OOM时记录heap信息

jmap命令的更多相关文章

  1. jmap命令(Java Memory Map)(转)

    JDK内置工具使用 一.javah命令(C Header and Stub File Generator) 二.jps命令(Java Virtual Machine Process Status To ...

  2. Linux下jmap命令查看内存使用

    Linux下jmap命令查看内存使用 jmap -heap 1234(1234为进程号) jmap是JDK自带的一个工具,非常小巧方便,其支持参数如下: -heap       打印heap空间的概要 ...

  3. java命令--jmap命令使用(查找内存泄漏对象)

    转自:https://www.cnblogs.com/kongzhongqijing/articles/3621163.html jdk安装后会自带一些小工具,jmap命令(Java Memory M ...

  4. 说说jmap命令

    jmap命令 ps -ef| grep java root 1426 1359 0 10:30 pts/0 00:00:00 grep java root 7807 1 0 Apr28 ? 00:22 ...

  5. 【JVM】jmap命令详解----查看JVM内存使用详情

    linux获取java进程PID: https://www.cnblogs.com/sxdcgaq8080/p/10734752.html 如果命令使用过程中报错,可能解决你问题的方案: https: ...

  6. jvm 性能调优工具之 jmap 命令详解

    jmap名称:Java Memory Map(内存映射) 官方文档:https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jmap.html ...

  7. Windows下jmap命令报错问题

       最近换了笔记本,新的工作环境下jmap命令居然在报错,而jps.jstat.jinfo.jstack都能正常使用,所以初步排除进程号的问题. Attaching to core 17536 fr ...

  8. Java的jmap命令使用详解

    jmap命令简介 jmap(Java Virtual Machine Memory Map)是JDK提供的一个可以生成Java虚拟机的堆转储快照dump文件的命令行工具.除此以外,jmap命令还可以查 ...

  9. jmap命令详解(转)

    1.命令基本概述 Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本.打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其 ...

  10. jmap命令详解

    1.命令基本概述 Jmap是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本.打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其 ...

随机推荐

  1. SVN server 安装 并创建用户访问

    1. 下载svn   官网https://www.visualsvn.com/server/download/ 或者其他网站都行,下载是VisualSVN-Server-3.5.6.msi. 2.安装 ...

  2. theano学习指南5(翻译)- 降噪自动编码器

    降噪自动编码器是经典的自动编码器的一种扩展,它最初被当作深度网络的一个模块使用 [Vincent08].这篇指南中,我们首先也简单的讨论一下自动编码器. 自动编码器 文献[Bengio09] 给出了自 ...

  3. C语言简短程序gcc编译过程

    一.建立一个×.c源文件.这里起名:rocks.c 二.编辑源代码,在c源文件内输入如下代码: #include <stdio.h> int main() { puts("C R ...

  4. js中动态载入css js样式

    js中动态载入css样式,方法如下: //<link rel="stylesheet" type="text/css" href="http:/ ...

  5. php做EXCEL数据导出导入开发的一些小问题

    前两天刚刚做开发CRM系统项目,在做要做EXCEL导出导入功能,因为以前做.NET开发用的是NPOI,但可是没找到PHP版本的,所以就网搜找了个国外的开源PHPEXCEL , 一开始只是做了简单的导入 ...

  6. Android 开机默认横竖屏

    做Android系统开发时,经常遇到机器开机默认横竖屏问题,现整理如下: 方法一:修改WindowManagerService.java 在这个类中修改int mRotation = 0;这个值即可. ...

  7. 域名的MX设置及校验方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  8. centos上安装jdk环境

    老沙采用的环境是centos 6.5 64位服务器.在linux上安装jdk环境都很多中方式,这里讲解下手工进行安装并进行环境变量配置. 首先需要下载一个64位版本的linux,可以去oracle官网 ...

  9. ubuntu安装mysql后不能远程访问的方法

    ubuntu安装mysql后不能远程访问的方法1.mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassw ...

  10. Parse error: syntax error, unexpected T_PUBLIC in 问题解决

    class 类中 public function _getInfo($sn){        $title = '';        $_array = explode('~', $sn);      ...