排查线上环境内存溢出(OOM)

2024-05-25 15:12

本文主要是介绍排查线上环境内存溢出(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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001865

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析