记录一次服务器内存耗尽排查过程使用到的命令

公司报表分析系统已经运行了一年多,最近收到服务器内存警告信息内存耗尽,第一时间着手排查问题,记录下排查内存耗尽问题整个过程使用到的命令。

第一步查看内存使用情况:

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内存中数据分布情况

jmap -histo 16699命令:
16699为jvm进程号

第四步查看Jvm线程状况:

jstack 16699:

待续。。。。。。

收藏文章数量从多到少与“把书读薄”是一个道理
原文地址:https://www.cnblogs.com/use-D/p/8401771.html