基于JDK命令行工具的监控
X参数
非标准化参数 有可能会变 但变化比较小
-Xint
解释执行
-Xcomp
第一次使用就编译成本地代码
-Xmixed
混合模式,JVM自己来决定是否编译成本地代码
XX参数
非标准化参数 相对不稳定 主要用于JVM调优和Debug
Boolean类型
格式:-XX:[+-]<name>
表示启用或者禁用name属性
比如:
-XX:+UseConcMarkSweepGC
启用CMS垃圾回收器
-XX:+UseG1GC
启用G1垃圾回收器
非Boolean类型
格式:-XX:<name>=<value>
表示name属性的值是value
比如:
-XX:MaxGCPauseMillis=500
GC最大停顿时间500ms
-XX:GCTimeRatio=19
Ratio为19
-Xms
等价于-XX:InitialHeapSize
-Xmx
等价于-XX:MaxHeapSize
查看JVM运行时参数
-XX:+PrintFlagsInitial
查看初始值-XX:+PrintFlagsFinal
查看最终值-XX:+UnlockExperimentalVMOptions
解锁实验参数-XX:+UnlockDiagnosticVMOptions
解锁诊断参数-XX:+PrintCommandLineFlags
打印命令行参数=
表示默认值:=
被用户或者JVM修改后的值jps
命令用于查看JAVA进程(-l
参数完全类名)jinfo
命令查看java进程参数信息jinfo -flag MaxHeapSize 12188
查看进程号为12188的最大堆大小-flags
查看手动更改过值的JVM参数jstat
命令用于查看JVM统计信息类装载 垃圾收集 JIT编译
jstat -class 6666 1000 10
查看进程6666的类装载信息 每隔1000ms打印一次共打印10次-gc 6666 1000 10
查看垃圾回收信息-compiler
-printcompilation
查看JNI编译情况
导出内存映像文件
内存溢出自动导出
-XX:+HeapDumpOnOutOfMemoryError
内存溢出时自动导出Dump
-XX:HeapDumpPath=./
导出路径
使用jmap命令手动导出
jmap -dump:format=b,file=heap.hprof 16940
使用MAT分析内存溢出
工具下载地址:https://www.eclipse.org/mat/
jstack查看线程状态
jstack 进程ID > xx.txt
Btrace 修改字节码
- 在JVisualVM中添加Btrace插件,添加classpath
- 使用命令行
btrace <pid> <trace_script>
Tomcat
psi-probe监控
该工具用来监控tomcat的状态
线程优化
..
Nginx
ngx_http_stub_status
监控连接信息1 2 3 4 5 6 7 8 9
server { listen 10061; location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; } }
ngxtop
监控请求信息https://github.com/lebinh/ngxtop
pip install ngxtop
1
ngxtop -c /usr/local/nginx/conf/nginx.conf -l /home/shw/app/log/shw_access.log
nginx-rrd
图形化监控
GC
可视化GC日志分析工具
- gceasy
- GCViewer
ParallelGC调优
GC调优步骤
- 打印GC日志
- 根据日志得到关键性指标
- 分析GC原因,调优JVM参数
- 除非确定,否则不要设置最大堆内存
- 优先设置吞吐量目标
- 如果吞吐量目标达不到,调大最大内存,不能让OS使用Swap,如果仍然达不到,降低目标。
- 吞吐量能达到,GC时间太长,设置停顿时间的目标。
G1 GC调优
- 年轻代大小:避免使用
-Xmn
,XX:NewRatio
等显式设置Young区大小,会覆盖暂停时间目标。 - 暂停时间目标:暂停时间不要太苛刻,其吞吐量目标是90%的应用程序时间和10%的垃圾回收时间,太严苛会直接影响吞吐量。