欢迎光临
我们一直在努力

服务器内存占用高但无明显进程占用,这是怎么回事?

服务器内存占用高,无明显进程占用

一、问题现象

服务器内存占用高 无明显进程占用

监控人员发现A服务器的内存使用率升高至90%以上,但研发人员反馈没有启动任何占用大量内存的进程,通过top命令查看,也没有明显看到哪个进程占用了大量内存。

二、排查思路及步骤

1、确定问题范围

定位问题层次:暂时无法确定是硬件故障还是软件问题。

分析依赖关系:检查服务器所属业务的上下游依赖是否正常,确定可处理问题的时间约3小时。

2、由表及里逐层深入

重启服务器:由于当前服务器已经宕机无法操作,优先在机房物理环境将机器重启,重启后发现大量OOM(Out Of Memory)报错,确定内存溢出导致机器宕机。

服务器内存占用高 无明显进程占用

硬件问题检查:查看服务器显示屏无异常报错,登录服务器带外地址,查看并没有相关硬件告警,因此判断无硬件故障,进一步排查系统故障。

操作系统问题检查:服务器已经完全无法登录了,通过CENTOS单用户模式也无法进入,于是采用外挂启动盘方式查看系统问题。

3、具体检查步骤

查看系统启动任务:判断是否因为预启动任务将内存吃满,导致系统引导刚结束就OOM,已知系统启动流程是加电→加载bios→找到启动设备→读取MBR(主引导记录)→启动引导程序GRUB→加载内核并检测→启动第一个进程/sbin/init→调用rc配置文件→执行rc.loacl→进入系统,因此我们查看rc.loacl,查看是否配置了特殊程序启动项。

查看内存实际状态:以GB为单位显示内存使用情况。

     free -g

显示如下:

     MemTotal:        3924684 kBMemFree:          419016 kBBuffers:            2208 kBCached:            30688 kBSwapCached:            0 kBActive:            87516 kBInactive:           7408 kBActive(anon):      62052 kBInactive(anon):      448 kBActive(file):      25464 kBInactive(file):     6960 kBUnevictable:           0 kBMlocked:               0 kBSwapTotal:             0 kBSwapFree:              0 kBDirty:               364 kBWriteback:             0 kBAnonPages:         62072 kBMapped:            23752 kBShmem:               460 kBSlab:            3363472 kBSReclaimable:    3333552 kBSUnreclaim:        29920 kBKernelStack:        1296 kBPageTables:         4540 kBNFS_Unstable:          0 kBBounce:                0 kBWritebackTmp:          0 kBCommitLimit:     1962340 kBCommitted_AS:     246680 kBVmallocTotal:   34359738367 kBVmallocUsed:       18660 kBVmallocChunk:     34359702432 kBHardwareCorrupted:     0 kBAnonHugePages:     14336 kBHugePages_Total:       0HugePages_Free:        0HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       2048 kBDirectMap4k:        6016 kBDirectMap2M:     2091008 kBDirectMap1G:     2097152 kB

注意:这里发现问题了,可以看到hugepages_total预分配巨页数量非常高,63448(分配页面数目)* 2048 k(页面大小)= 129,941,504k ≈ 124G,可以看到物理内存都被预分配给内存巨页了。

服务器内存占用高 无明显进程占用

查看是否启用huge_page

     cat /proc/sys/vm/nr_hugepages

结果是0的话表示未启用。

进一步查看内存占用状态

     cat /proc/meminfo

注意:这里发现问题了,可以看到hugepages_total已经被分配,因此查看sysctl.conf配置文件。

     cat /etc/sysctl.conf

发现配置了vm.nr_hugepages条目,将此条目#注释,然后重启服务器,可以正常进入系统。

禁用HugePages的方法

将 nr_hugepages 文件配置改回 0。

注释或删除 sysctl.conf 中的vm.nr_hugepages条目。

重启服务器生效。

三、上文归纳

HugePages可以按实际需求使用,但是切记不可将物理内存全部分配导致服务器出现夯机,Linux下的大页一般分为以下两种:

1、标准大页(Huge Pages):从Linux Kernel 2.6后被引入,目的是使用更大的页面(memory page size)以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大而面容量功能,HugePages使用预分配的内存,一般单个大页的空间大于4k。

2、透明大页(Transparent Huge Pages):从RHEL 6 .SUSE Server 11,Oracle Linux (UEK2)开始引入的一个功能,Transparent Huge Pages是动态分配内存的。

相关问题与解答

问题1:如何释放Linux系统中的缓存?

答:可以通过以下命令释放Linux系统中的缓存:

echo 3 > /proc/sys/vm/drop_caches

参数3表示释放所有缓存,如果只想释放页缓存,可以使用参数1;如果想释放目录项和inode缓存,可以使用参数2。

问题2:如何查看Linux系统中的内存使用情况?

答:可以使用free命令查看系统的内存使用情况,包括总内存、已用内存、空闲内存等信息。

free -h

这个命令会以人类可读的格式输出信息。

以上内容就是解答有关“服务器内存占用高 无明显进程占用”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《服务器内存占用高但无明显进程占用,这是怎么回事?》
文章链接:https://yuyunkj.com/article/21700.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发