如何排查线上内存飙高问题

本文介绍了如何利用Linux命令如top、vmstat、pidstat和JDK工具jstat、jstack、jmap来排查线上内存飙高问题。通过实例展示了如何分析内存泄漏,包括查看线程资源占用、堆内存使用情况以及使用MAT工具分析dump文件。
摘要由CSDN通过智能技术生成

标题常用的监控和诊断内存工具

工欲善其事,必先利其器。平时排查内存性能瓶颈时,我们往往需要用到一些 Linux 命令行或者 JDK 工具来辅助我们监测系统或者虚拟机内存的使用情况,下面我就来介绍几种好用且常用的工具。

Linux 命令行工具之 top 命令

top 命令是我们在 Linux 下最常用的命令之一,它可以实时显示正在执行进程的 CPU 使用率、内存使用率以及系统负载等信息。其中上半部分显示的是系统的统计信息,下半部分显示的是进程的使用率统计信息。
在这里插入图片描述

除了简单的 top 之外,我们还可以通过 top -Hp pid 查看具体线程使用系统资源情况:
在这里插入图片描述

标题Linux 命令行工具之 vmstat 命令

vmstat 是一款指定采样周期和次数的功能性监测工具,我们可以看到,它不仅可以统计内存的使用情况,还可以观测到 CPU 的使用率、swap 的使用情况。但 vmstat 一般很少用来查看内存的使用情况,而是经常被用来观察进程的上下文切换。
在这里插入图片描述

r:等待运行的进程数;
b:处于非中断睡眠状态的进程数;
swpd:虚拟内存使用情况;
free:空闲的内存;
buff:用来作为缓冲的内存数;
si:从磁盘交换到内存的交换页数量;
so:从内存交换到磁盘的交换页数量;
bi:发送到块设备的块数;
bo:从块设备接收到的块数;
in:每秒中断数;
cs:每秒上下文切换次数;
us:用户 CPU 使用时间;
sy:内核 CPU 系统使用时间;
id:空闲时间;
wa:等待 I/O 时间;
st:运行虚拟机窃取的时间。

标题Linux 命令行工具之 pidstat 命令

pidstat 是 Sysstat 中的一个组件,也是一款功能强大的性能监测工具,我们可以通过命令:yum install sysstat 安装该监控组件。之前的 top 和 vmstat 两个命令都是监测进程的内存、CPU 以及 I/O 使用情况,而 pidstat 命令则是深入到线程级别。
通过 pidstat -help 命令,我们可以查看到有以下几个常用的参数来监测线程的性能:
在这里插入图片描述

常用参数:

-u:默认的参数,显示各个进程的 cpu 使用情况;
-r:显示各个进程的内存使用情况;
-d:显示各个进程的 I/O 使用情况;
-w:显示每个进程的上下文切换情况;
-p:指定进程号;
-t:显示进程中线程的统计信息。

我们可以通过相关命令(例如 ps 或 jps)查询到相关进程 ID,再运行以下命令来监测该进程的内存使用情况:
在这里插入图片描述

其中 pidstat 的参数 -p 用于指定进程 ID,-r 表示监控内存的使用情况,1 表示每秒的意思,3 则表示采样次数。
其中显示的几个关键指标的含义是:
Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页;
Maj
线上内存飙升是一个比较严重的问题,如果不及时处理,可能会导致系统崩溃。以下是一般的排查问题的过程: 1. 监控告警分析:系统应该有监控告警机制,如果内存使用率过高,应该及时发出告警并记录监控数据。首先,需要分析告警信息和监控数据,确认内存使用率确实出现了异常。 2. 定位问题代码:通过监控工具、日志和代码调试等方法,确定哪些代码出现了内存使用率飙升的问题。可以使用 JVM 的内存分析工具,例如 jmap、jhat、jstack、VisualVM 等来分析内存使用情况,并找出内存泄漏的代码位置。 3. 解决问题代码:根据定位出的代码问题,进行修复。对于内存泄漏问题,需要分析代码中的对象生命周期,释放不再使用的对象,并检查是否存在对象引用未释放的情况。对于频繁创建和销毁对象、大对象等问题,需要优化代码逻辑,减少内存占用。 4. 测试验证:完成修复后,需要进行测试验证,确保问题得到了解决,并且没有引入新的问题。 5. 监控预警优化:针对该问题,需要优化监控预警机制,避免类似问题再次出现。可以增加更加详细的监控数据、设置更加敏感的告警阈值等等。 总之,线上内存飙升是一个比较严重的问题,需要及时发现、定位、修复和验证。同时,也需要优化监控预警机制,避免类似问题再次出现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值