---恢复内容开始---

1. jetty 修改JVM的参数

  1. deploy/bin/env.sh

在上面的环境变量脚本中进行修改;如果分配给JVM的内存是4g

这个里面的JAVA_OPTS 的配置项就是用来给JVM 进行配置的;

  • Xms:初始Head 内存的大小,应用使用的最小内存
  • Xmx:Heap 内存的最大值
  • -XX:NewSize=1024m -XX:MaxNewSize=1024m:新生代内存的大小,一般分配NewSize是Xms的 1/4 ---1/8
  • -XX:PermSize=160m -XX:MaxPermSize=160m :永生代内存的大小,一般是用来加载 静态文件的,只要比最大的静态文件多个10--20% 的bufffer 即可
  • -XX:+UseParallelGC :GC的方式选择并行方式,GC 时消耗性能比较少
  • -Xloggc:/home/.../logs/gc.log  #启动gclog ,会把JVM 每次gc的信息打印到gc.log 里面

其他还有很多变量;java的内存分为 young old perf    当三个内存来回切换频繁是,会多长GC 就是垃圾回收;会影响我们的性能。

2. JVM 参数详解:

http://singleant.iteye.com/blog/1308842

http://aixiangct.blog.163.com/blog/static/915224612010101833230342/

JVM 参数设置经验:

http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

3. JVM 信息查看工具命令

jstat 查看 GC 的信息  【选项:-gcutil】 查看gc的信息

  1. sudo -u admin jstat -gcutil 6245 3000
  2. S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  3. 0.00  21.03  33.28   6.66  62.39     31    0.987     0    0.000    0.987
  4. 0.00  13.06  91.34   7.53  62.63     39    1.094     0    0.000    1.094
  5. 0.00  13.06  98.36   7.53  62.63     39    1.094     0    0.000    1.094
  6. 11.05   0.00   6.25   7.59  62.65     40    1.104     0    0.000    1.104
  7. 11.05   0.00  11.10   7.59  62.65     40    1.104     0    0.000    1.104
  8. #s0 s1:是内存的2个交换区,如果内存从E(eden 区)转移到O(old 区)时需要借助S0 S1 2个中间交换区转移。
  9. # E eden :新生代区,java代码中新new的类占用的内存;
  10. # O old  :老生代区,当新生代区(E)内存占用100时会把E里面的数据迁移到O;当O里面的数据占用内存超过90%时会出发FullGC;在JVM FullGC 期间,java的服务停止服务(大概持续1s的时间);此时如果收到外部的请求会超时:rt
  11. # P 永久(永生)生代:一般用来加载一些静态数据,java进程启动时会一次性加载,加载之后基本就不变化了。
  12. # YGC :年轻代(新生代) 进行GC,新生代GC 及时回收内存,代价比较小也比较频繁
  13. # YGCT:年轻待GC 累加的时间之和(服务重启归0)
  14. # FGC: 全堆范围内进行GC ,包括YGC 和OGC,每次FGC时java服务暂停,这样代价比较大
  15. # GCT: 所有的gc的占用的时间

jmap 查看堆 heap的内存使用情况

  1. sudo -u admin jmap -heap 6245
  2. Attaching to process ID 6245, please wait...
  3. Debugger attached successfully.
  4. Server compiler detected.
  5. JVM version is 20.0-b11
  6. using thread-local object allocation.
  7. Parallel GC with 8 thread(s)
  8. Heap Configuration:  #JVM 的配置:JAVA_OPTS=" -server
  9. MinHeapFreeRatio = 40
  10. MaxHeapFreeRatio = 70
  11. MaxHeapSize      = 5368709120 (5120.0MB)#整个堆内存的大小    -Xms5g -Xmx5g
  12. NewSize          = 1073741824 (1024.0MB)#新生代内存的大小   -XX:NewSize=1024m -XX:MaxNewSize=256m
  13. MaxNewSize       = 1073741824 (1024.0MB)
  14. OldSize          = 5439488 (5.1875MB)#老生代的内存大小
  15. NewRatio         = 2
  16. SurvivorRatio    = 2
  17. PermSize         = 167772160 (160.0MB)#持久生代 永生代  -XX:PermSize=160m -XX:MaxPermSize=160m
  18. MaxPermSize      = 167772160 (160.0MB)
  19. Heap Usage:
  20. PS Young Generation
  21. Eden Space:
  22. capacity = 1045364736 (996.9375MB)        #NewSize= S0 + S1 + E
  23. used     = 289950536 (276.5183792114258MB)
  24. free     = 755414200 (720.4191207885742MB)
  25. 27.7367818154524% used
  26. From Space:      #S0 S1
  27. capacity = 14548992 (13.875MB)
  28. used     = 6190208 (5.9034423828125MB)
  29. free     = 8358784 (7.9715576171875MB)
  30. 42.54733248873874% used
  31. To Space:
  32. capacity = 13828096 (13.1875MB)
  33. used     = 0 (0.0MB)
  34. free     = 13828096 (13.1875MB)
  35. 0.0% used
  36. PS Old Generation
  37. capacity = 4294967296 (4096.0MB)  #老生代的内存大小 = total heap 大小 - Newsize 大小
  38. used     = 369568008 (352.44751739501953MB)
  39. free     = 3925399288 (3743.5524826049805MB)
  40. 8.604675717651844% used
  41. PS Perm Generation
  42. capacity = 167772160 (160.0MB)  #永生代大小
  43. used     = 105796384 (100.89529418945312MB)
  44. free     = 61975776 (59.104705810546875MB)
  45. 63.0595588684082% used

用jstack dump 线程的信息,看当时线程有没有问题;

进程查找所有的线程:top -H -p 进程pid会打印出此进程所有的线程;然后在dump 线程的栈信息

  1. sudo -u admin jstack 6245 > stack.log
  2. #"DubboClientHandler-172.22.6.25:20880-thread-155"
  3. #daemon prio=10 tid=0x00000000576de800 nid=0x687a waiting on condition [0x000000
  4. 0054f81000]

gclog的分析:

    1. #前提是在JVM 配置中加入Xloggc的配置:
    2. -XX:+UseParallelGC -Xloggc:/home/.../.../gc.log
    3. cat gc.log
    4. #java进程启动到现在的时间(s) GC的类别 GC的减少内存的结果  这次GC 花的时间
    5. 62802.998: [GC 3152988K->2129998K(5231808K), 0.0241120 secs]
    6. 62846.660: [GC 3156430K->2133046K(5232896K), 0.0223710 secs]
    7. 62877.147: [GC 3161142K->2134765K(5232384K), 0.0197390 secs]
    8. #下面这行的含义:
    9. #62802.998: [GC 3152988K->2129998K(5231808K), 0.0241120 secs]
    10. #62802.998: #这次gc 从java进程启动到现在执行的时间,单位是秒
    11. #GC:GC的种类,代表是YGC   如果Full GC 说明是FGC
    12. #3152988K:这次GC 之前整个堆内存(Heap 占用大小)
    13. #2129998K:这次GC 之后整个堆内存(Heap 占用大小)
    14. #也就是这次GC 的效果是释放了(3152988K - 2129998K)内存
    15. #(5231808K) :代表整个JVM 最大的堆内存 Xmx
    16. #0.0241120 secs: 此次GC 耗费的时间;如果Full GC 则在这个耗费时间里面java 服务暂停服务
    17. 原文链接:https://blog.csdn.net/caoshuming_500/article/details/21472997

---恢复内容结束---

修改JVM的参数、Jstat、Jstack、gclog的更多相关文章

  1. 修改jvm xms参数

    http://hi.baidu.com/200770842223/item/9358aad4f3194e1a20e2501b http://www.cnblogs.com/mingforyou/arc ...

  2. Eclipse jvm启动参数在哪设置

    学习并转载自https://jingyan.baidu.com/article/624e7459653ca534e8ba5a26.html Java是一门非常受欢迎的编程语言,Java的开发人员多数使 ...

  3. NetBeansRCP-添加/修改NetBeans的JVM启动参数

    NetBeans运行的速度实在是不敢恭维.还好机器配置还可以,修改其JVM启动参数命令行,以期运行的更加顺畅. 那么如何修改NetBeans IDE的JVM参数呢? 1.到NetBeans IDE的安 ...

  4. 使用maven时,如何修改JVM的配置参数;maven命令执行时到底消耗多少内存?

    maven是使用java启动的,因此依赖JVM,那么如何修改JVM参数? MAVEN_OPTS 在系统的环境变量中,设置MAVEN_OPTS,用以存放JVM的参数,具体设置的步骤,参数示例如下: MA ...

  5. 一文学会JVM配置参数与工具使用

    经过前面的各种分析,我们知道了关于JVM很多的知识,比如版本信息,类加载,堆,方法区,垃圾回收等,但是总觉得心里不踏实,原因是没看到实际的一些东西. 所以这在本文,咱们就好好来聊一聊关于怎么将这些内容 ...

  6. 深入理解JVM虚拟机10:JVM常用参数以及调优实践

    转自http://www.rowkey.me/blog/2016/11/02/java-profile/?hmsr=toutiao.io&utm_medium=toutiao.io&u ...

  7. IntelliJ IDEA设置JVM运行参数

    2015十一月 28 原 IntelliJ IDEA设置JVM运行参数 分类:JavaSE (11566) (1) 打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions ...

  8. jvm相关参数

    官方地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html#BEHHGFAE 一.查看jvm运行参数 1.查看 ...

  9. 性能测试三十六:内存溢出和JVM常见参数及JVM参数调优

    堆内存溢出: 此种溢出,加内存只能缓解问题,不能根除问题,需优化代码堆内存中存在大量对象,这些对象都有被引用,当所有对象占用空间达到堆内存的最大值,就会出现内存溢出OutOfMemory:Java h ...

随机推荐

  1. Oracle/MySql/SQL Sqlserver分页查询

    简述 简单概括一下Oracle,MySql,SQL Sqlserver这三个数据库的分页查询语句. Oracle分页查询 例:每页显示两条数据,现在要查询第二页,也就是第3-4条数据. 查询语句: s ...

  2. 在页面实现qq跳转链接

    http://shang.qq.com/v3/widget/consult.html

  3. CSS元素隐藏的display和visibility

    一.CSS元素隐藏 在CSS中,让元素隐藏(指屏幕范围内肉眼不可见)的方法很多,有的占据空间,有的不占据空间:有的可以响应点击,有的不能响应点击. { display: none; /* 不占据空间, ...

  4. Android自定义view之仿微信录制视频按钮

    本文章只写了个类似微信的录制视频的按钮,效果图如下:             一.主要的功能: 1.长按显示进度条,单击事件,录制完成回调 2.最大时间和最小时间控制 3.进度条宽度,颜色设置 二.实 ...

  5. 关于sqlserver帐号被禁用问题

    若发现sqlsrver所有帐号不小心被禁用了,这个时候怎么办?用重装吗?不用,仔细看小白是怎么一步一步解开这个谜题的.首先需要Windows帐号设置里重新添加一个新帐号.并将其添加到管理员组里面,然后 ...

  6. 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest C Sequence (打表)

    打个表找找规律,到24445的时候乘2以后产生了0出现循环. 一般地,判断循环节是否存在可以用Floyd判圈算法. #include<bits/stdc++.h> using namesp ...

  7. build.sbt的定义格式

    一个简单的build.sbt文件内容如下: name := "hello" // 项目名称 organization := "xxx.xxx.xxx" // 组 ...

  8. STL:string类中size()与length()的区别

    结论是:两者没有任何区别 解释: C++Reference中对于两者的解释: 两者的具体解释都一模一样: 理解: length是因为C语言的习惯而保留下来的,string类最初只有length,引进S ...

  9. JS中的delete操作符

    首先,delete删除成功返回true,失败返回false. js代码: function wxCount ($element) { this.init($element); } wxCount.pr ...

  10. 关于回顾css发现的一些问题

    1.针对于before和after伪元素的用法: <style> .clearfix:before, .clearfix:after{ clear:both; content:" ...