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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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