`
lzj0470
  • 浏览: 1273135 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

正确理解Linux内存占用过高的问题

阅读更多

最近有个月经问题,老有人问为何开机后,还没有其他服务,mem就被用完了?是不是内存泄露?是否要重启服务?只能说不要看现象,要看本质才能找到问题的根源。
往往给出这样的结果,怀疑内存用了90%:
Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached

这样怀疑很普遍,因为很多人用惯了Windows。Windows下,可以使用任务管理器查看当前进程对于内存的消耗情况。在我看来,Windows物理 内存总是留下一定的空间,就算此时物理内存有空闲时,也会让某些程序去使用虚拟内存,目的是在Windows下启动新程序时,直接分配空闲的物理内存,这 样子新程序启动速度就较快,而Linux则不然。

而在Linux下,使用top命令看到内存占用情况:

Mem: 4146788k total, 3825536k used, 321252k free, 213488k buffers
Swap: 2650684k total, 80k used, 2650604k free, 3006404k cached


这里的结果显示使用了3.8G的used,占用率达到90%。看看free的结果你还可以对比一下:
$ free -m
total used free shared buffers cached
Mem: 4049 3784 265 0 208 2939
-/+ buffers/cache: 636 3413
Swap: 2588 0 2588

虽然MEM显示了3.7G左右的used,但是(-/+ buffers/cache)减去buffers和cache的结果可以看到,当前进程实际占用内存是636M,而可用空闲(free)内存为3.4G


可以这么理解:在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快。

如上面的例子:使用了4G的内存,3.7G被占用,但是buuffer和cached部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。

因此查看目前进程正在实际被使用的内存,是used-(buffers+cache) ,也可以认为如果swap没有大量使用,mem还是够用的,只有mem被当前进程实际占用完(没有了buffers和cache),才会使用到swap的。

分享到:
评论

相关推荐

    嵌入式Linux内存使用与性能优化

    首先,理解Linux内存模型是优化的基础。Linux内核采用虚拟内存管理,包括物理内存(RAM)和交换空间(Swap)。物理内存是硬件直接支持的存储空间,而交换空间是在硬盘上预留的部分区域,用于扩展内存。当物理内存...

    《深入理解linux内存管理》学习笔记 Linux 高阶学习

    在《深入理解Linux内存管理》的学习笔记中,我们将会探讨以下几个关键概念: 1. **内存区域(Memory Regions)**:Linux将内存划分为不同的区域,如保留区(Reserved)、初始化数据区(Initialized Data)、未初始...

    《深入理解LINUX内存管理》学习笔记

    在Linux操作系统中,内存...通过深入研究这些知识点,不仅可以理解Linux内存管理的基本原理,还能在实际操作中更好地优化系统性能,预防和解决问题。《深入理解LINUX内存管理》的学习笔记是探索这一主题的重要资源。

    理解Linux进程的内存使用量

    在优化内存使用时,除了关注单个进程的内存占用,还要考虑系统的整体内存压力,如空闲内存、缓存和交换活动。合理的内存管理策略可以帮助保持系统的高效运行,避免不必要的交换活动,从而提高性能。同时,理解和监控...

    Linux内存管理详解.ppt

    Linux内存管理是操作系统的核心组成部分,尤其对于服务器和嵌入式设备等依赖稳定高效内存操作的环境至关重要。在Linux内核中,内存管理涉及到多个层面,包括分配、释放、碎片控制以及高速缓存优化等。 首先,Linux...

    深入理解Linux内存映射机制

    ### 深入理解Linux内存映射机制 #### 一、绪论 现代操作系统为了有效管理和利用内存资源,采用了一种名为**虚拟内存**的技术。虚拟内存允许操作系统为每个进程分配独立的地址空间,即使实际物理内存不足也可以通过...

    【LINUX】关于动态内存分配的理解

    此外,传统数组的生命周期和作用域也受到限制,这使得程序员无法控制数组的内存释放和跨函数使用等问题。 动态内存分配可以解决以下四个传统数组的缺陷: 1. 数组长度必须事先指定且为常量。动态内存分配允许...

    深入理解LINUX内存管理学习笔记

    这份学习笔记详细讲解了Linux内存管理的各个方面,包括基本概念、核心机制、管理策略以及实际操作中的应用,是理解和提升Linux系统性能的关键参考资料。通过深入阅读和实践,可以进一步提升在Linux环境下进行系统...

    如何正确查看Linux机器内存使用情况.docx

    首先,我们需要理解Linux内存管理的基本概念。Linux内核采用了一种名为“虚拟内存”的机制,它允许系统将硬盘空间作为内存使用,以扩大可用内存的容量。在这种机制下,内存分为多个部分,包括物理内存(RAM)和交换...

    嵌入式LINUX内存使用与性能优化

    以上内容仅是嵌入式Linux内存使用与性能优化的冰山一角,实际操作中需要结合具体项目和硬件条件,深入理解和实践才能做好这项工作。"嵌入式LINUX内存使用与性能优化.pdf"这个文件可能会详细阐述这些概念,并提供实际...

    易语言源码易语言linux内存操作源码.rar

    易语言是一种基于中文编程的计算机程序...理解并掌握以上知识点,将有助于你在易语言中有效地进行Linux内存操作,编写出更加高效和稳定的程序。在实践中,不断学习和积累经验,可以提升你在内存管理方面的专业技能。

    手工释放linux内存.pdf

    ### 手工释放Linux内存详解 #### 一、引言 在Linux环境下,内存管理是一项重要的任务,尤其在服务器环境中更是如此。...正确的做法是在理解Linux内存管理机制的基础上,根据实际情况合理使用这些工具和技术。

    深入理解linux内核 中文第三版 高清PDF

    《深入理解Linux内核》中文第三版不仅介绍了这些基本概念,还深入探讨了每个主题的细节,如内存管理的分页机制、文件系统的缓存策略、网络协议栈的分层结构等。对于希望在Linux领域深化知识的读者来说,这是一本不可...

    LINUX内核内存屏障

    ### Linux内核内存屏障知识点详解 #### 一、引言 在现代计算机系统尤其是多处理器系统(SMP)中,为了提高性能,处理器通常会采用...理解内存屏障的工作原理和应用场景对于开发高性能、高可靠性的系统软件至关重要。

    Linux设置虚拟内存

    此命令会显示系统中总的内存、已使用的内存、剩余的内存以及缓存和缓冲区占用的内存等信息,帮助我们理解当前的内存分配状况。 #### 步骤二:查看磁盘使用情况 接下来,通过执行`df -BM`或`df -m`命令,可以查看...

    Linux011-内存管理

    Linux0.11是一个早期版本的Linux内核,虽然相对简陋,但它的内存管理系统为我们理解现代Linux内核提供了基础。本节将深入探讨Linux0.11内核的内存管理机制。 1. **物理内存管理**: - Linux0.11内核通过页框管理器...

    linux 内核内存屏障

    ### Linux内核内存屏障知识点详解 #### 一、内存访问抽象模型 在现代计算机系统中,内存访问操作可能会出现乱序...通过正确地使用内存屏障,可以有效地解决内存访问乱序带来的问题,从而确保系统的稳定性和可靠性。

    linux下的一个内存池实现

    本文将深入探讨如何在Linux环境下实现一个内存池,并结合设计图和单元测试用例来理解其工作原理和效果。 内存池的基本思想是预先一次性分配一大块连续的内存,然后根据需要从中划分出大小固定的块供程序使用,而...

Global site tag (gtag.js) - Google Analytics