当前位置:首页 > 生活百科

linux释放内存命令(linux top命令的用法详细详解)

栏目:生活百科日期:2025-05-05浏览:0

什么是内存

内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。

它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。

只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。

内存的运行也决定计算机整体运行快慢的程度。

Linux内存回收机制

为啥要回收:

内核需要为任何时刻突发到来的内存申请提供足够的内存,以便cache的使用和其他相关内存的使用不至于让系统的剩余内存长期处于很少的状态。当真的有大于空闲内存的申请到来的时候,会触发强制内存回收。

内存回收针对的目标有两种,一种是针对zone的,另一种是针对一个memcg的,把针对zone的内存回收方式分为三种,分别是快速内存回收、直接内存回收、kswapd内存回收。

查看Linux内存情况

查看/proc/meminfo

bash

&[root@test ~]# cat /proc/meminfoMemTotal:       16166688 kBMemFree:        14051412 kBMemAvailable:   14772588 kBBuffers:            2116 kBCached:          1073260 kBSwapCached:            0 kBActive:           770384 kBInactive:         698264 kBActive(anon):     450156 kBInactive(anon):    76748 kBActive(file):     320228 kBInactive(file):   621516 kBUnevictable:           0 kBMlocked:               0 kBSwapTotal:      33554428 kBSwapFree:       33554428 kBDirty:               476 kBWriteback:             0 kBAnonPages:        393328 kBMapped:           153828 kBShmem:            133628 kBSlab:             246448 kBSReclaimable:     133892 kBSUnreclaim:       112556 kBKernelStack:       13472 kBPageTables:        30496 kBNFS_Unstable:          0 kBBounce:                0 kBWritebackTmp:          0 kBCommitLimit:    41637772 kBCommitted_AS:    4257776 kBVmallocTotal:   34359738367 kBVmallocUsed:      320696 kBVmallocChunk:   34350426108 kBHardwareCorrupted:     0 kBAnonHugePages:    155648 kBCmaTotal:              0 kBCmaFree:               0 kBHugePages_Total:       0HugePages_Free:        0HugePages_Rsvd:        0HugePages_Surp:        0Hugepagesize:       2048 kBDirectMap4k:      279276 kBDirectMap2M:     6965248 kBDirectMap1G:    11534336 kB

使用free命令查看

bash

&[root@test ~]# free -h              total        used        free      shared  buff/cache   availableMem:            15G        874M         13G        130M        1.2G         14GSwap:           31G          0B         31G

参数说明:

total:总内存大小。used:已经使用的内存大小(这里面包含cached和buffers和shared部分)。free:空闲的内存大小。shared:进程间共享内存(一般不会用,可以忽略)。buffers:内存中写完的东西缓存起来,这样快速响应请求,后面数据再定期刷到磁盘上。cached:内存中读完缓存起来内容占的大小(这部分是为了下次查询时快速返回)。available:还可以被应用程序使用的物理内存大小,和free的区别是,free是真正未被使用的内存,available是包括buffers、cached的。Swap:硬盘上交换分区的使用大小。

Buffer和Cache

Cache(缓存),为了调高CPU和内存之间数据交换而设计,Buffer(缓冲)为了提高内存和硬盘(或其他I/O设备的数据交换而设计)。

Cache主要是针对读操作设计的,不过Cache概念可能容易混淆,我理解为CPU本身就有Cache,包括一级缓存、二级缓存、三级缓存,我们知道CPU所有的指令操作对接的都是内存,而CPU的处理能力远高于内存速度,所以为了不让CPU资源闲置,Intel等公司在CPU内部集成了一些Cache,但毕竟不能放太多电路在里面,所以这部分Cache并不是很大,主要是用来存放一些常用的指令和常用数据,真正大部分Cache的数据应该是占用内存的空间来缓存请求过的数据,即上面的Cached部分(这部分纯属个人理解,正确与否有待考证)。

Buffer主要是针对写操作设计的,更细的说是针对内存和硬盘之间的写操作来设计的,目的是将写的操作集中起来进行,减少磁盘碎片和硬盘反复寻址过程,提高性能。

在Linux系统内部有一个守护进程会定期清空Buffer中的内容,将其写入硬盘内,当手动执行sync命令时也会触发上述操作。

Swap

虽然现在的内存已经变得非常廉价,但是swap仍然有很大的使用价值,合理的规划和使用swap分区,对系统稳定运行至关重要。

Linux下可以使用文件系统中的一个常规文件或者一个独立分区作为交换空间使用。同时linux允许使用多个交换分区或者交换文件。

内存泄漏和内存溢出

内存溢出(OOM,out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露(memory leak),是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

如何判断内存泄露

用 jstat -gcutil PID,观察Old这个参数,如果每次执行完FULLGC之后Old区的值一次比一次升高,就可以判断为发生了内存泄漏。

如何判断内存溢出

Heap Dump(堆转储文件)它是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap dump文件前会触发一次FullGC,所以heap dump文件中保存的是FullGC后留下的对象信息。

通过设置如下的JVM参数,可以在发生OutOfMemoryError后获取到一份HPROF二进制Heap Dump文件:

-XX:+HeapDumpOnOutOfMemoryError

生成的文件会直接写入到工作目录。

注意:该方法需要JDK5以上版本。

转存堆内存信息后,需要对文件进行分析,从而找到OOM的原因。可以使用以下方式:

mat:eclipse memory analyzer, 基于eclipse RCP的内存分析工具。具体使用参考:http://www.eclipse.org/mat/

jhat:JDK自带的java heap analyze tool,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言OQL,分析相关的应用后,可以通过http://localhost:7000来访问分析结果。不推荐使用。

OOM常见原因及解决方案

可参考高手总结的9种 OOM 常见原因及解决方案

释放内存

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,例如当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。此时就需 要执行释放内存(清理缓存)的操作了。

释放内存操作:

bash

sync  # 强制将内存中的缓存写入磁盘echo 数字 &> /proc/sys/vm/drop_caches #数字可以是0-3的整数

数字含义:

0:不释放(系统默认值)1:释放页缓存2:释放dentries和inodes3:释放所有缓存什么是内存Linux内存回收机制查看Linux内存情况查看/proc/meminfo使用free命令查看Buffer和CacheSwap内存泄漏和内存溢出如何判断内存泄露如何判断内存溢出OOM常见原因及解决方案释放内存

“linux释放内存命令(linux top命令的用法详细详解)” 的相关文章

一键硬盘ghost怎么使用(win7一键ghost重装系统教程)

如何一键安装系统想必是大多数电脑新手非常想了解的,很多用户知道一键ghost可以安装系统,但是还不清楚如何用一键ghost安装win7系统。事实上一键ghost...

lcd屏幕和oled屏幕哪个伤眼睛(两种品牌优缺点分析)

如果要给手机的屏幕材质进行分类,我们可以分出两大派系,即LCD屏和OLED屏。一般来说,现在的旗舰级手机都会配备OLED全面屏,LCD屏大多出现在中低端机型上(...

2023年88.5万家餐企阵亡(意味着什么)

就在2021年餐企方面因为疫情与外卖平台的影响餐企关店率约等于28%连茶颜悦色这种奶茶界的&”巨人&”也关闭了87家,就连我认为最不可能...

logo设计要求怎么写,详解logo设计的规范化

很多小伙伴都不是很清楚国际上对于logo标识设计尺寸和设计规范是多少,小编特意整理logo设计尺寸的资料以供大家学习:我们用CDR软件或者AI软件把logo设计...

cpu监测软件哪个好(CPU性能监视器)

当你的CPU散热风扇疯狂嘶吼时,你是不是非常担心CPU会过热?我们知道CPU温度过高时,可能会出现卡顿,死机,蓝屏,自动关机等情况。一般CPU的理想温度,是高于...

cc软件是什么意思(一个叫cc的社交软件讲解)

在Smart3D软件方面,我们总结了用户遇见次数最高的一些问题,并在这里做出统一回复,供大家参考。刺点完成后更改坐标系刺点完成后发现坐标系选择错误,而直接更改坐...

免费文件夹加密软件哪个好(加密聊天软件排行榜)

导读:文件加密软件指的是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信号,但因不知解密的方法,仍然无法了解信息的内容的一种保护文件信息...

创业失败的案例及原因分析(返乡创业失败率90%)

作者:子清来源:农业行业观察(ID:nyguancha)返乡创业,东风正紧!早在2015年15年国办就已印发《关于支持农民工等人员返乡创业的意见》,指出要为农民...

创业选什么项目比较好,5个小本创业项目推荐

对于一些创业失败者而言,选择继续创业只是时间问题,没有其他选项。因为大部分创业失败者都是债务累累,指望拿工资还债几乎没有希望,那只有继续创业。那么,对于人脉断裂...

商标的价值和功能有哪些,怎样评估一个商标价值

商标是无形资产的组成部分,既然是资产,那么就会有相应的价值构成,并且可以换算成相应的货币数额,那么一枚商标的价值是如何构成的?其价值判断标准又是什么呢?首选我们...