JVM

启动脚本
JVM_OPTS="-server -Xms2g -Xmx2g -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$PRG/logs -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006"
远程调试命令
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006
监控内存使用情况
jstat -gcutil  pid  2000 5                       //每隔2秒执行一次,共执行5次

S0                                               //Heap上的S0区已使百分比
S1                                               //Heap上的S1区已使百分比
E                                                //Heap上的Eden区已使百分比
O                                                //Heap上的Old区已使百分比
M                                                //元空间已使用空间的百分比
YGC                                              //从启动到采样时Young GC次数
YGCT                                   //从启动到采样时Young GC所用时间(单位秒)
FGC                                    //从启动到采样时Full GC的次数
FGCT                                   //从启动到采样时Full GC所用时间(单位秒)
GCT                                  //从启动到采样时用于垃圾回收总时间(单位秒)

jmap -heap pid                                   //生成heap使用情况百分比
查看jvm的参数
jps -mvl

jinfo -flags pid
生成dump文件快照,dump文件记录了JVM中堆内存运行的情况
jmap -dump:live,format=b,file=heap.hprof pid
jvm查看大对象
查看内存对应映射存活情况,这里主要查看对应的java进程有没有大对象,有大对象说明一直占用内存没有释放。

jmap -histo:live pid | head -10
定位某个线程问题
jstack pid | grep -C 20 `printf %x tid`

tid = top -Hp pid
动态设置jvm参数(jinfo是jdk自带的命令)
jinfo -flag -PrintGC pid
查看java系统参数(jinfo是jdk自带的命令)
jinfo -sysprops pid
查看进程状态
cat /proc/pid/status
Name 应用程序或命令的名字
State 任务的状态,运行/睡眠/僵死/
常用工具
jps                             //查看java进程信息
jinfo                           //查看设置参数
jmap                            //打印内存映射,制作堆dump文件
jstat                           //性能监控工具
jstack                          //打印线程的栈信息,制作线程dump文件。
jhat                            //内存分析工具
jconsole                        //简易的可视化控制台
jvisualvm                       //功能强大的控制台
堆大小设置
-Xms1g                                                      初始堆空间大小
-Xmx1g                                                      最大堆空间大小
-Xmn1g                                                      年轻代空间大小
-Xss2m                                                      线程的栈空间大小
堆信息输出设置
-XX:+PrintGC                                      在控制台输出GC日志

-XX:+PrintGCDetails                               会自动开启在控制台输出GC日志

-XX:+PrintGCTimeStamps                       输出GC的时间戳(以基准时间的形式)

-XX:+HeapDumpOnOutOfMemoryError                  打印内存溢出时的堆信息

-XX:HeapDumpPath=./dump/                         生成的堆信息存放位置

-Xloggc:./gc.log                                 生成gc日志的信息
垃圾收集的主要算法
标记-清除 标记-压缩 复制 分代收集

1.标记-清除算法(mark sweep)        //位置不连续 产生碎片 效率偏低(两遍扫描)
2.标记-压缩算法(mark compact)      //没有碎片,效率偏低(两遍扫描,指针需要调整)
3.复制算法 (copying)              //没有碎片,浪费空间
4.分代收集算法
如何定位垃圾
1引用计数算法(不能解决的问题引用循环问题)
2可达性分析算法
元空间、直接内存相关
-XX:+AlwaysPreTouch            启动时分配物理内存,否则分配虚拟内存,影响启动时间

元空间参数
-XX:MetaspaceSize=1g         初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize=1g      最大值,默认没限制,达到一定值时触发full gc

元空间参数除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:
1)-XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
2)-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集


直接内存
-XX:MaxDirectMemorySize=1g   最大值,默认没限制,达到一定值时触发full gc

堆外内存的使用jvm没办法控制

-XX:NativeMemoryTracking=detail  追踪JVM的内部内存使用情况,打开会带来5%-10%的性能损耗,生产环境不要引入

查看追踪JVM的内部内存使用情况
jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]
# summary: 分类内存使用情况.
# detail: 详细内存使用情况,除了summary信息之外还包含了虚拟内存使用情况。
# baseline: 创建内存使用快照,方便和后面做对比
# summary.diff: 和上一次baseline的summary对比
# detail.diff: 和上一次baseline的detail对比
# shutdown: 关闭NMT

例如:jcmd pid VM.native_memory detail scale=MB
参考地址:https://www.cnblogs.com/rude3knife/p/13570423.html
程序内存不断增长问题排查参考文档
https://www.cnblogs.com/muzhongjiang/p/15162383.html
https://www.cnblogs.com/duanxz/p/6089485.html
https://www.cnblogs.com/adolfmc/p/13580748.html
posted @   rbcd  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示