本文主要是介绍排查线上环境内存溢出(OOM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、先使用命令列出所有已运行的容器
docker ps
[root@dasdadsd ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
71c935097187 redis:6.0 "docker-entrypoint.s…" 8 weeks ago Up 8 weeks 0.0.0.0:5655->6379/tcp, :::5122->6379/tcp redis
c321a5c56eab smessage:1 "/bin/sh -c 'java -j…" 2 months ago Up 2 months 0.0.0.0:4545->4565/tcp, :::5123->3123/tcp smessage
2、找到容器进入
docker exec -it [容器id] /bin/bash
[root@dasdadsd ~]# docker exec -it c32 /bin/bash
root@c321a5c56eab:/#
3、我这里使用的是top指令查看
root@dasdadsd :/# top
top - 13:02:50 up 86 days, 4:20, 0 users, load average: 0.05, 0.05, 0.01
Tasks: 13 total, 1 running, 12 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.7 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 1995464 total, 1617408 used, 378056 free, 116708 buffers
KiB Swap: 1049596 total, 273408 used, 776188 free. 388496 cached MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 7 root 20 0 2528792 384840 4076 S 0.3 19.3 124:35.79 java 1 root 20 0 4336 88 0 S 0.0 0.0 0:00.02 sh 1102 root 20 0 21960 760 252 S 0.0 0.0 0:00.02 bash 8014 root 20 0 21960 788 280 S 0.0 0.0 0:00.03 bash 8584 root 20 0 21960 760 256 S 0.0 0.0 0:00.02 bash
10153 root 20 0 21960 3504 2996 S 0.0 0.2 0:00.03 bash
10175 root 20 0 23636 2656 2288 R 0.0 0.1 0:00.00 top
11097 root 20 0 21956 756 252 S 0.0 0.0 0:00.03 bash
15019 root 20 0 21956 772 264 S 0.0 0.0 0:00.04 bash
24749 root 20 0 21960 768 264 S 0.0 0.0 0:00.03 bash
30518 root 20 0 21960 788 280 S 0.0 0.0 0:00.02 bash
31525 root 20 0 21960 760 252 S 0.0 0.0 0:00.02 bash
32165 root 20 0 21960 776 268 S 0.0 0.0 0:00.02 bash
找到java的pid为7
4、使用 下面的命令进行分析
jmap -histo [java进程号] | head -[展示行数]
root@c321a5c56eab:/# jmap -histo 7|head -20num #instances #bytes class name
----------------------------------------------1: 38723 53068200 [B2: 165183 41040304 [C3: 6379 22771536 [I4: 467926 14973632 java.util.HashMap$Node5: 203504 6512128 com.mysql.cj.conf.BooleanProperty6: 15270 5198864 [Ljava.util.HashMap$Node;7: 114471 3663072 com.mysql.cj.conf.StringProperty8: 151533 3636792 java.lang.String9: 72718 2908720 java.util.TreeMap$Entry10: 56327 1802464 com.mysql.cj.conf.IntegerProperty11: 26419 1200112 [Ljava.lang.Object;12: 22626 1086048 java.util.HashMap13: 9319 1030968 java.lang.Class14: 31635 1012320 java.util.concurrent.ConcurrentHashMap$Node15: 9791 861608 java.lang.reflect.Method16: 39255 628080 java.lang.Object17: 16936 541952 java.util.Hashtable$Entry
这就看出来每个类栈的内存了
这篇关于排查线上环境内存溢出(OOM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!