记录一次服务器内存耗尽排查过程使用到的命令
公司报表分析系统已经运行了一年多,最近收到服务器内存警告信息内存耗尽,第一时间着手排查问题,记录下排查内存耗尽问题整个过程使用到的命令。
第一步查看内存使用情况:
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,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步