为何used内存占用很大,但是在meminfo中找不到?

2023-10-07 07:32

本文主要是介绍为何used内存占用很大,但是在meminfo中找不到?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务器上使用free查看内存使用情况,发现如下:

             total        used        free      shared  buff/cache   available
Mem:           250G         31G        196G         41M         22G        217G
Low:           250G         54G        196G
High:            0B          0B          0B
Swap:            0B          0B          0B

used内存占用有31个G的大小。而查看meminfo时也没有发现异常:

MemTotal:       262688980 kB
MemFree:        205753876 kB
MemAvailable:   228204672 kB
Buffers:          336952 kB
Cached:         22287564 kB
......
AnonHugePages:     98304 kB
HugePages_Total:       5
HugePages_Free:        5
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      423808 kB
DirectMap2M:    10692608 kB
DirectMap1G:    258998272 kB

这30个G的内存由谁分配走了呢?使用top或者ps看下各个进程内存占用情况,依然没什么发现:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND1 root      20   0  194076   5868   2804 S   0.0  0.3   0:03.38 systemd2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H6 root      20   0       0      0      0 S   0.0  0.0   0:00.55 ksoftirqd/07 root      rt   0       0      0      0 S   0.0  0.0   0:00.65 migration/08 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh9 root      20   0       0      0      0 S   0.0  0.0   0:03.82 rcu_sched10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain11 root      rt   0       0      0      0 S   0.0  0.0   0:00.54 watchdog/012 root      rt   0       0      0      0 S   0.0  0.0   1:14.84 watchdog/113 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/114 root      20   0       0      0      0 S   0.0  0.0   0:03.03 ksoftirqd/116 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H17 root      rt   0       0      0      0 S   0.0  0.0   0:00.86 watchdog/218 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 migration/219 root      20   0       0      0      0 S   0.0  0.0   0:01.62 ksoftirqd/221 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/2:0H22 root      rt   0       0      0      0 S   0.0  0.0   0:00.35 watchdog/323 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/324 root      20   0       0      0      0 S   0.0  0.0   0:00.25 ksoftirqd/326 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/3:0H

到底发生了什么,系统中的内存无迹可寻了吗?

解决方法是使用atop,这里输出的内存信息更加全面,在内存信息那一栏,可以查看到一个选项: hptot,表示系统中的大页占据的内存总量。

那么问题是meminfo中也有对应的数据,为什么没有体现出来呢?

其实在meminfo中,只能体现到2M类型的大页,对于服务器来说,可能存在1G的大页内存通过cmdline进行预留的,那么这部分信息在meminfo中查看不到:

Hugepagesize:       2048 kB

所以为了更加全面的掌握系统中的内存信息,对于大页来说,可以直接查看相应的文件节点:

/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

至于为什么内核不做出针对1G大页的统计信息,目前我也不是很了解,猜测可能是这种场景比较少见,一般也就虚拟化和服务器上才可能会使用,一般场景不会预留GB大小的内存,或者根本没有那么大的内存。

这篇关于为何used内存占用很大,但是在meminfo中找不到?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/156970

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内