排查问题命令

查看链接占用情况:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'


查看进程中线程cpu和内存占用情况: top -H -p <pid>


将10进制转换为16进制: printf "0x%x\n" 6619


生成当前进程Thread情况: jstack <pid> > 11.txt


查看内存gc情况:jstat -gc <pid>

# jstat -gc 9582 1000

S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT

1024.0 1024.0 0.0 0.0 8192.0 7933.3 42108.0 23401.3 20480.0 19990.9 157 0.274 40 1.381 1.654


jstat命令的最后一个参数是每个输出的时间间隔。每隔一秒就会打印出内存和垃圾收集数据。


让我们一起来对每一列的意义进行逐一了解:

S0C和S1C:这一列展示了Survivor0和Survivor1区的当前大小(单位KB)。

S0U和S1U:这一列展示了当前Survivor0和Survivor1区的使用情况(单位KB)。注意:无论任何时候,总会有一个Survivor区是空着的。

EC和EU:这些列展示了Eden区当前空间大小和使用情况(单位KB)。注意:EU的大小一直在增大。而且只要大小接近EC时,就会触发Minor GC并且EU将会减小。

OC和OU:这些列展示了年老代当前空间大小和当前使用情况(单位KB)。

PC和PU:这些列展示了Perm Gen(永久代)当前空间大小和当前使用情况(单位KB)。

YGC和YGCT:YGC这列显示了发生在年轻代的GC事件的数量。YGCT这列显示了在年轻代进行GC操作的累计时间。注意:在EU的值由于minor GC导致下降时,同一行的YGC和YGCT都会增加。

FGC和FGCT:FGC列显示了发生Full GC事件的次数。FGCT显示了进行Full GC操作的累计时间。注意:相对于年轻代的GC使用时间,Full GC所用的时间长很多。

GCT:这一列显示了GC操作的总累计时间。注意:总累计时间是YGCT和FGCT两列所用时间的总和(GCT=YGCT+FGCT)。

jstat的优点,我们同样可以在没有GUI的远程服务器上运行jstat。注意:我们是通过 -Xmn10m 选项来指定S0C、S1C和EC的总和为10m的。


JDK8参数介绍:

S0C和S1C:第一个和第二个幸存区的大小

S0U和S1U:第一个和第二个幸存区的使用大小

EC和EU:伊甸园区的大小、伊甸园区的使用大小

OC和OU:老年代大小、老年代使用大小

MC和MU:方法区大小、方法区使用大小

CCSC和CCSU:压缩类空间大小、压缩类空间使用大小

YGC:年轻代垃圾回收次数

YGCT:年轻代垃圾回收消耗时间

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间


查看内存占用情况

# jstat -gcutil 6608 1000

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   

  0.00   0.00 100.00  99.98  95.89  93.14   1910   92.417   467 4775.453 4867.870



查看堆内存详细占用情况

# jmap -histo:live 6608 |more


 num     #instances         #bytes  class name

----------------------------------------------

   1:      21939550     1443252384  [C

   2:      22234266      533622384  java.lang.String

…………


jvm参数优化

建议:-XX:+UseParNewGC -XX:+UseConcMarkSweepGC


jvisualvm插件安装

第一执行网址: https://visualvm.github.io/pluginscenters.html

 第二找到对应的jdk,我是JDK7选择第二个,打开

第三步复制上面那个catalog URL地址。

第四部点击设置,编辑,把复制的路径放入URL中,点击确定。


自带工具jmap和jstack 为什么会"well-known file is not secure"

原因:启动进程用户和当前执行命令用户不一致,切换用户即可;


推荐文章:

Java内存泄漏分析系列之三:jstat命令的使用及VM Thread分析

https://www.javatang.com/archives/2017/10/20/12131956.html


【JVM调优系列】----CPU过高的分析与解决方案

https://blog.csdn.net/zlts000/article/details/78570903


java 内存泄露

https://my.oschina.net/songhongxu/blog/204659


深入了解JAVA虚拟机和JVisualVM简单使用

https://blog.csdn.net/mike_caoyong/article/details/6994217


Java内存与垃圾回收调优

http://www.importnew.com/14086.html


linux修改open files数

https://www.cnblogs.com/chenpingzhao/p/5563602.html


java高分局之jstat命令使用

https://blog.csdn.net/maosijunzi/article/details/46049117


jstat查看gc情况

https://blog.csdn.net/liuxiao723846/article/details/51271574



没有登录不能评论