启动脚本
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
S0
S1
E
O
M
YGC
YGCT
FGC
FGCT
GCT
jmap -heap pid
查看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
jinfo
jmap
jstat
jstack
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]
例如: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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)