记录一次服务器内存耗尽排查过程使用到的命令
公司报表分析系统已经运行了一年多,最近收到服务器内存警告信息内存耗尽,第一时间着手排查问题,记录下排查内存耗尽问题整个过程使用到的命令。
第一步查看内存使用情况:
free -m 命令:已M单位显示服务器实际内存使用情况,如图:
第1行mem数据:
total内存总数: 7864
used已经使用的内存数: 6527
free空闲的内存数: 1337
shared当前已经废弃不用
buffers内存数: 62
cached内存数:874
第2行-/+buffers/cache数据,显示的是实际被使用掉的内存(used)以及实际剩余的内存(free):
used实际使用内存数:5590,used=(第1行)used-(第2行)free
free实际剩余内存数:2273,free=(第1行)free+(第1行)buffers+(第1行)cached
第3行swap数据为虚拟内存(略过)
buffer 与cache 的区别:A buffer is something that has yet to be “written” to disk. A cache is something that has been “read” from the disk and stored for later use
buffer:即将要被写入磁盘,而cache:被从磁盘中读出来
缓存cached是把读取过的数据保存起来,重新读取时(找到需要的数据)就不要去读硬盘了。
缓冲buffers是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。
第二步查看JVM内存情况:GC情况
jstat -gc 16699 1000 命令:
16699为jvm的进程号
1000为1000毫秒,输出一次gc信息
显示内容说明如下(部分结果是通过其他其他参数显示的,暂不说明):
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
PC:Perm(持久代)的容量 (字节)
PU:Perm(持久代)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)
第三步查看堆栈信息:查看JVM内存中数据分布情况

第四步查看Jvm线程状况:
jstack 16699:
待续。。。。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!