服务器内存占用高,无明显进程占用
一、问题现象
监控人员发现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
这个命令会以人类可读的格式输出信息。
以上内容就是解答有关“服务器内存占用高 无明显进程占用”的详细内容了,我相信这篇文章可以为您解决一些疑惑,有任何问题欢迎留言反馈,谢谢阅读。