JVM问题排查

2019-06-01  本文已影响0人  会飞的水珠

一、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

上一篇 下一篇

猜你喜欢

热点阅读