JVM问题排查

一、JVM的参数类型

1.Boolean类型

格式:-XX:[+-]<name>表示启用或者禁用name属性。

比如:-XX:+UseConcMarkSweepGC

           -XX:+UseG1GC

2.非Boolean类型

格式:-XX:<name>=<value>表示name属性的值是value。

比如:-XX:MaxGCPauseMillis=500

           XX:GCTimeRatio=19

3.-Xmx -Xms(虚拟机所在的最大、最小内存)

不是X参数,而是XX参数

-Xms等价于-XX:InitialHeapSize

-Xmx等价于-XX:MaxHeapSize

jinfo -flag MaxHeapSize <PID>

线程大小(单位:kb):jinfo -flag ThreadStackSize <PID>

4.查看初始值:-XX:+PrintFlagsInitial


5.查看修改值:-XX:+PrintFlagsFinal

        1.终端输入:java -XX:+PrintFlagsFinal -version > flags.txt

6.查看tomcat的最大内存是设置了多少:

jinfo -flag MaxHeapSize <Pid>

7.查看tomcat已经被我们手动赋过的值:

jinfo -flag <Pid>

8.查看垃圾回收器:

二、jstat查看JVM统计信息

可以查看类装载、垃圾收集、JIT编译

1.查看类加载的情况:

jstat -class <PID>

2.查看垃圾回收的情况:

每隔1秒钟输出10次

jstat -gc <PID> 1000 10


非堆区是操作系统的本地内存

三、jmap+MAT内存溢出

1.保存为java镜像文件:

jmap -dump:format=b,file=heap.hprof <Pid>

四、jstack与线程状态

1.查看进程的资源占用率

top -p <pid> -H

2.用jstack查看线程情况

jstack <pid> > test.txt

3.Linux下把十进制转16进制,在test.txt中要使用

printf "%x" <pid>

用十六进制数在导出的txt中搜索,这样就能找到对应的类。

参考文档

第一章

第二章

jdk8工具集

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html

Troubleshooting

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/

jps

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html

jinfo

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html

jstat

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

jmap:

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jmap.html

mat:

http://www.eclipse.org/mat/downloads.php

jstack:

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstack.html

java线程的状态

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr034.html

java线程状态转化:

https://mp.weixin.qq.com/s/GsxeFM7QWuR--Kbpb7At2w

死循环导致CPU负载高

https://blog.csdn.net/goldenfish1919/article/details/8755378

正则表达式导致死循环:

https://blog.csdn.net/goldenfish1919/article/details/49123787

第三章

jvisualVM:

https://docs.oracle.com/javase/8/docs/technotes/guides/visualvm/index.html

https://visualvm.github.io/documentation.html

jvisulaVM如何添加插件

https://visualvm.github.io/index.html

第四章

btrace下载

https://github.com/btraceio/btrace

https://github.com/btraceio/btrace/releases/tag/v1.3.11

第五章

jdwp协议:

https://www.ibm.com/developerworks/cn/java/j-lo-jpda3/

tomcat-manager:

{tomcat}/webapps/docs/manager-howto.html

psi-probe:

https://github.com/psi-probe/psi-probe

tomcat优化相关参数:

${tomcat}/webapps/docs/config/http.html

${tomcat}/webapps/docs/config/host.html

${tomcat}/webapps/docs/config/context.html

${tomcat}/webapps/docs/connectors.html

apr连接器:

http://apr.apache.org/

第六章

nginx官网文档

http://nginx.org/en/docs/

nginx安装:

http://nginx.org/en/linux_packages.html

ngx_http_stub_status:

http://nginx.org/en/docs/http/ngx_http_stub_status_module.html

ngxtop:

https://github.com/lebinh/ngxtop

nginx-rdd

http://www.linuxde.net/2012/04/9537.html

第七章

jvm的运行时数据区

https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

Metaspace

http://ifeve.com/jvm-troubleshooting-guide-4/

压缩类空间

https://blog.csdn.net/jijijijwwi111/article/details/51564271

CodeCache

https://blog.csdn.net/yandaonan/article/details/50844806

http://engineering.indeedblog.com/blog/2016/09/job-search-web-app-java-8-migration/

GC调优指南:

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/toc.html

如何选择垃圾收集器

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/collectors.html

G1最佳实践

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html#recommendations

G1 GC的一些关键技术

https://zhuanlan.zhihu.com/p/22591838

CMS日志格式

https://blogs.oracle.com/poonam/understanding-cms-gc-logs

G1日志格式

https://blogs.oracle.com/poonam/understanding-g1-gc-logs

GC日志分析工具

http://gceasy.io/ 

GCViewer

https://github.com/chewiebug/GCViewer

ZGC:

http://openjdk.java.net/jeps/333

第八章

java虚拟机规范

https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

java语言规范

https://docs.oracle.com/javase/specs/jls/se8/html/index.html

javap:

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javap.html

字段描述符

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.2

方法描述符

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.3

字节码指令:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html

常量池:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4

本地变量表:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.6.1

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.13

操作数栈:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.6.2

Code属性:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.3

LineNumberTable:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.12

constant variable:

https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.4

常量表达式

https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.28

String.intern

https://blog.csdn.net/goldenfish1919/article/details/80410349

String去重

https://blog.csdn.net/goldenfish1919/article/details/20233263

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,841评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,415评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,904评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,051评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,055评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,255评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,729评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,377评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,517评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,420评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,467评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,144评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,735评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,812评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,029评论 1 256
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,528评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,126评论 2 341

推荐阅读更多精彩内容

  • IntelliJ远程调试教程 附录 第二章 jdk8工具集 https://docs.oracle.com/jav...
    泠泉阅读 381评论 0 0
  • Java开发中的常见问题: 依赖版本冲突问题 OOM 机器负载很高 方法调用速度异常的慢 代码逻辑不符合预期,该执...
    西部大漂客阅读 1,298评论 0 1
  • 注:最近一直想出一篇介绍JVM底层函数调用的博客,奈何越写越多,现在还没写完,先来个简单的安慰下我受伤的心灵 滴滴...
    miaoLoveCode阅读 4,175评论 10 47
  • 一、线上CPU飚高、死锁等排查基本步骤: 1、top 记录CPU使用率最高的JAVA进程PID 2、top -H...
    晚歌歌阅读 249评论 0 0
  • 1、JVM的参数类型 1.1 标准参数:在各jdk版本中较稳定 -help-server -client-vers...
    大厂offer阅读 9,337评论 0 8