作用: 实时查看和调整虚拟机参数.

jinfo 是jdk自带的一个工具,它可以用来查看正在运行的java应用程序的扩展参数(JVM中-X标示的参数);甚至支持在运行时修改部分参数。

1、通过以下的命令你便能看到JVM中哪些flag可以被jinfo动态修改:

  1. # java -XX:+PrintFlagsFinal -version|grep manageable
  2. intx CMSAbortablePrecleanWaitMillis            = 100             {manageable}
  3. intx CMSWaitDuration                           = 2000            {manageable}
  4. bool HeapDumpAfterFullGC                       = false           {manageable}
  5. bool HeapDumpBeforeFullGC                      = false           {manageable}
  6. bool HeapDumpOnOutOfMemoryError                = false           {manageable}
  7. ccstr HeapDumpPath                              =                 {manageable}
  8. uintx MaxHeapFreeRatio                          = 100             {manageable}
  9. uintx MinHeapFreeRatio                          = 0               {manageable}
  10. bool PrintClassHistogram                       = false           {manageable}
  11. bool PrintClassHistogramAfterFullGC            = false           {manageable}
  12. bool PrintClassHistogramBeforeFullGC           = false           {manageable}
  13. bool PrintConcurrentLocks                      = false           {manageable}
  14. bool PrintGC                                   = false           {manageable}
  15. bool PrintGCDateStamps                         = false           {manageable}
  16. bool PrintGCDetails                            = false           {manageable}
  17. bool PrintGCTimeStamps                         = false           {manageable}
  18. java version "1.7.0_79"
  19. Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
  20. Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

通过选项-XX:+PrintFlagsFinal可以列出所有的JVM flag,而其中的标注为manageable 的flag则是值得我们关注的部分。这些flag可通过JDK management interface(-XX:+PrintFlagsFinal)动态修改。

用法总结:

简介

jinfo是jdk自带的命令,可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数。

通常会先使用jps查看java进程的id,然后使用jinfo查看指定pid的jvm信息.

jps   #通过jps来查看当前运行状态的虚拟机进程

查看jvm的参数

1
jinfo -flags process_id

查看java系统参数

1
jinfo -sysprops process_id

虚拟机的这些参数可以通过下面的命令查看:

1
java -XX:+PrintFlagsFinal -version | grep manageable

除了通过启动脚本可以设置参数,PrintGC默认是打开的,因此我们只需要打开PrintGCDetails参数。

1
2
jinfo -flag +PrintGC 27250
jinfo -flag +PrintGCDetails 27250

如果需要关闭GC日志的打印,使用下面的命令:

1
2
jinfo -flag -PrintGC 27250
jinfo -flag -PrintGCDetails 27250 

查看是否开启了GC日志的打印:

1
2
jinfo -flag PrintGC 27250
jinfo -flag PrintGCDetails 27250  

常用JVM参数

1
2
3
4
5
6
7
-Xms:初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制
-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
-Xmn:新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与jmap -heap中显示的New gen是不同的。整个堆大小=新生代大小 + 老生代大小 + 永久代大小。在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认值为8。两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10。
-Xss:每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用, 如果栈不是很深, 应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"-Xss is translated in a VM flag named ThreadStackSize”一般设置这个值就可以了。
-XX:PermSize:设置永久代(perm gen)初始值。默认值为物理内存的1/64。
-XX:MaxPermSize:设置持久代最大值。物理内存的1/4。

深入理解java虚拟机---虚拟机工具jinfo(十五)的更多相关文章

  1. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!

    JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...

  2. JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

    JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...

  3. JAVA基础——Arrays工具类十大常用方法

    Arrays工具类十大常用方法 原文链接:http://blog.csdn.net/renfufei/article/details/16829457 0. 声明数组 String[] aArray ...

  4. 【Java入门提高篇】Day33 Java容器类详解(十五)PriorityQueue详解

    今天要介绍的是基础容器类(为了与并发容器类区分开来而命名的名字)中的另一个成员——PriorityQueue,它的大名叫做优先级队列,想必即使没有用过也该有所耳闻吧,什么?没..没听过?emmm... ...

  5. java web学习总结(二十五) -------------------JSP中的九个内置对象

    一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet ...

  6. 【Java学习笔记之二十五】初步认知Java内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面 ...

  7. Java开发笔记(八十五)通过字符流读写文件

    前面介绍了文件的信息获取.管理操作,以及目录下的文件遍历,那么文件内部数据又是怎样读写的呢?这正是本文所要阐述的内容.File工具固然强大,但它并不能直接读写文件,而要借助于其它工具方能开展读写操作. ...

  8. Java线程和多线程(十五)——线程的活性

    当开发者在应用中使用了并发来提升性能的同时,开发者也需要注意线程之间有可能会相互阻塞.当整个应用执行的速度比预期要慢的时候,也就是应用没有按照预期的执行时间执行完毕.在本章中,我们来需要仔细分析可能会 ...

  9. JAVA基础知识总结:十五

    一.Set接口 Set集合不允许包含相同的元素,如果试图将两个相同的元素添加到一个集合中,使用add方法,添加失败,返回false 1.HashSet HashSet是Set集合的一个实现类,大多数情 ...

随机推荐

  1. Birdman Quotes

    Popularity is the slutty little cousin of prestige (威望,声望) . A man becomes a critic when he cannot b ...

  2. android --------学习流程图

    如何快速入门和进阶安卓开发,是很多技术小白的疑问. 大家都知道,Android开发要学的技能非常多,技术更新速度还快,但是总的来说:掌握最核心的技术,最规范的开发流程,成为专业.出色的安卓开发工程师也 ...

  3. 1.1 从UNIX到Linux的发展历程

    MIT的CTSS:第一个分时操作系统 ◼ Multics系统(Multiplexed Information and Computing System) ⚫ 1965年AT&T,MIT和GE的 ...

  4. python记录_day27 tcp/ip五层模型

    ## 网络协议按照不同的功能分为多层,目前存在的模型有osi七层模型.tcp/ip五层和tcp/ip四层模型 我们主要用的是tcp/ip五层模型 那么每层的作用是什么呢,现在就从设计者的角度自下到上逐 ...

  5. 3月23 格式布局及relative

    主要是针对格式布局的一些内容: 1:position:fix 锁定位置(相对于浏览器的位置),例如网上弹出的一些广告 <style type="text/css"> # ...

  6. 伪分布式&&完全分布式&&高可用(zookeeper)的配置文件内容

    [伪分布式] ①[core-site.xml] <configuration> <property> <name>fs.defaultFS</name> ...

  7. java之collection总结

    Collection 来源于Java.util包,是非常实用常用的数据结构!!!!!字面意思就是容器.具体的继承实现关系如下图,先整体有个印象,再依次介绍各个部分的方法,注意事项,以及应用场景.   ...

  8. Visual studio 利用Nuget 控制台安装已经下载好的插件

    利用Nuget 控制台安装已经下载好的插件 1 打开控制台 Tools > Library Package Manager > Package Manager Console 2 设置pa ...

  9. maven中 install的install:install的区别

    如果一个项目,你想安装jar包到本地仓库,可能会报The packaging for this project did not assign a file to the build artifact ...

  10. 使用ajax提交form表单,包括ajax文件上传【转载】

    [使用ajax提交form表单,包括ajax文件上传] 前言 转载:作者:https://www.cnblogs.com/zhuxiaojie/p/4783939.html 使用ajax请求数据,很多 ...