Linux内存分析的一些基础知识

简介: Linux内存分析的一些基础知识

最近因为做的东西发生了踩内存的情况,需要对这个进行分析。

cat /proc/meminfo

这个是所有内存信息的展示,/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的 ,/proc/meminfo所包含的信息比”free”等命令要丰富得多,因此需要了解这些字段的含义。

/ $ cat /proc/meminfo
MemTotal:         877368 kB  :所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)(HighTotal + LowTotal),系统从加电开始到引导完成,BIOS等要保留一些内存,内核要保留一些内存,最后剩下可供系统支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的。
MemFree:           22516 kB  :LowFree与HighFree的总和,被系统留着未使用的内存,MemFree是说的系统层面
MemAvailable:     470244 kB  :应用程序可用内存数。系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以MemFree不能代表全部可用的内存,这部分可回收的内存加上MemFree才是系统可用的内存,即:MemAvailable≈MemFree+Buffers+Cached,它是内核使用特定的算法计算出来的,是一个估计,MemAvailable是说的应用程序层面
Buffers:            1772 kB  :用来给文件做缓冲大小
Cached:           459224 kB  :被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache )
SwapCached:           16 kB  :被高速缓冲存储器(cache memory)用的交换空间的大小,已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口
Active:           333148 kB  :在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用. (Active(anon) + Active(file))
Inactive:         330384 kB  :在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径. (Inactive(anon) + Inactive(file))
Active(anon):     104368 kB  :活跃的与文件无关的内存(比如进程的堆栈,用malloc申请的内存)(anonymous pages),anonymous pages在发生换页时,是对交换区进行读/写操作
Inactive(anon):   104508 kB  :非活跃的与文件无关的内存(比如进程的堆栈,用malloc申请的内存)
Active(file):     228780 kB  :活跃的与文件关联的内存(比如程序文件、数据文件所对应的内存页)(file-backed pages) File-backed pages在发生换页(page-in或page-out)时,是从它对应的文件读入或写出
Inactive(file):   225876 kB  :非活跃的与文件关联的内存(比如程序文件、数据文件所对应的内存页)
Unevictable:        6708 kB  :
Mlocked:            1428 kB  :
HighTotal:        261888 kB  :高位内存总大小(Highmem是指所有内存高于860MB的物理内存,Highmem区域供用户程序使用,或用于页面缓存。该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存)
HighFree:           5680 kB  :未被使用的高位内存大小
LowTotal:         615480 kB  :低位内存总大小,低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构
LowFree:           16836 kB  :未被使用的低位大小
SwapTotal:        614396 kB  :交换空间的总大小
SwapFree:         611044 kB  :未被使用交换空间的大小
Dirty:                40 kB  :等待被写回到磁盘的内存大小
Writeback:             0 kB  :正在被写回到磁盘的内存大小
AnonPages:        209224 kB  :未映射页的内存大小
Mapped:           280668 kB  :设备和文件等映射的大小
Shmem:              1084 kB  :
Slab:              59840 kB  :内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗
SReclaimable:      34196 kB  :可收回Slab的大小
SUnreclaim:        25644 kB  :不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
KernelStack:        7504 kB  :常驻内存,每一个用户线程都会分配一个kernel stack(内核栈)
PageTables:        15508 kB  :管理内存分页页面的索引表的大小
NFS_Unstable:          0 kB  :不稳定页表的大小
Bounce:                0 kB  :
WritebackTmp:          0 kB  :
CommitLimit:     1053080 kB  :根据超额分配比率('vm.overcommit_ratio'),这是当前在系统上分配可用的内存总量,这个限制只是在模式2('vm.overcommit_memory')时启用。CommitLimit用以下公式计算:CommitLimit =('vm.overcommit_ratio'*物理内存)+交换例如,在具有1G物理RAM和7G swap的系统上,当`vm.overcommit_ratio` = 30时 CommitLimit =7.3G
Committed_AS:   16368536 kB  :目前在系统上分配的内存量。是所有进程申请的内存的总和,即时所有申请的内存没有被完全使用,例如一个进程申请了1G内存,仅仅使用了300M,但是这1G内存的申请已经被 "committed"给了VM虚拟机,进程可以在任何时间使用。如果限制在模式2('vm.overcommit_memory')时启用,分配超出CommitLimit内存将不被允许
VmallocTotal:     245760 kB  :可以vmalloc虚拟内存大小
VmallocUsed:           0 kB  :vmalloc已使用的虚拟内存大小
VmallocChunk:          0 kB  :最大的连续未被使用的vmalloc区域

MemTotal这个一般比实际的内存要小,这是因为有部分内存被保留了,留给一些小系统使用,而这部分的内存是不可见的。

所以学会对这个里面的信息进行分析还是很有必要的。

参考资料:

https://blog.csdn.net/qq_42139745/article/details/127302222

目录
相关文章
|
6天前
|
Web App开发 监控 JavaScript
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
|
30天前
|
编译器 C语言
动态内存分配与管理详解(附加笔试题分析)(上)
动态内存分配与管理详解(附加笔试题分析)
45 1
|
4天前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
21小时前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
10天前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
84 9
|
10天前
|
存储 缓存 监控
|
15天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
29天前
|
存储 缓存 监控
Linux中内存和性能问题
【10月更文挑战第5天】
37 4
|
28天前
|
算法 Linux
Linux中内存问题
【10月更文挑战第6天】
39 2
|
7天前
|
缓存 算法 Linux
Linux内核中的内存管理机制深度剖析####
【10月更文挑战第28天】 本文深入探讨了Linux操作系统的心脏——内核,聚焦其内存管理机制的奥秘。不同于传统摘要的概述方式,本文将以一次虚拟的内存分配请求为引子,逐步揭开Linux如何高效、安全地管理着从微小嵌入式设备到庞大数据中心数以千计程序的内存需求。通过这段旅程,读者将直观感受到Linux内存管理的精妙设计与强大能力,以及它是如何在复杂多变的环境中保持系统稳定与性能优化的。 ####
14 0
下一篇
无影云桌面