【内存】linux 内存管理

本文介绍了在Linux系统中如何通过命令释放内存缓存以优化系统性能,包括使用`sync`和`drop_caches`来清理缓存的具体步骤,并对比了清理前后内存使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

----------------------- 手动释放内存

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

 

------------------------ linux下清理缓存,以释放内存

 

1、当前内存使用情况:free

         total    used         free     shared   buffers     cached
Mem:      12296092   11812364     483728          0     390868   10336804
-/+ buffers/cache:    1084692   11211400
Swap:      8385920        164    8385756

 

2、sync(一定要在第三部之前运行这个命令)

 

3、echo 3 > /proc/sys/vm/drop_caches

 

4、查看内存使用情况:free

         total      used      free        shared    buffers     cached
Mem:      12296092     890740   11405352          0       3012     131116
-/+ buffers/cache:     756612   11539480
Swap:      8385920        164    8385756

 

5、echo 0 > /proc/sys/vm/drop_caches

 

目前还不知道是否会有异常情况,根据介绍应该是一种比较常用的释放缓存的方法,但是建议还是不要经常使用,如果swap没有使用很多的情况下,可以不做任何操作,以保证系统稳定运行,一但swap开始使用了,就考虑分析程序或者增加物理内存吧。

 

 

--------------------------free

[root@nonamelinux ~]# free
                  total    used    free     shared     buffers     cached
Mem:              386024   377116  8908        0          21280       155468
-/+buffers/cache: 386024   200368  185656
Swap:              393552     0    393552


-m的意思是M字节来显示内容


第二行(mem):
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers缓冲区/cached高速缓存:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
(-/+ buffers/cache):
(-buffers/cache) used内存数:200368 (指的第一部分Mem行中的used[377116] - buffers[21280] - cached[155468])
(+buffers/cache) free内存数: 185656 (指的第一部分Mem行中的free + buffers + cached)
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

我想大家看了上面,还是很晕.第一部分(Mem)与第二部分(-/+ buffers/cache)的结果中有关used和free为什么这么奇怪.
对操作系统来讲是Mem的参数.buffers/cached 都是属于被使用,所以它认为free只有232.
对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,

buffer/cached会很快地被使用。




第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。
这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是8908KB,

已用内存是377116KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,

当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.
如上例:185656=8908+21280+155468






下面是buffers与cached的区别。
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages.
cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等。
而cached直接用来记忆我们打开的文件,如果你想知道他是不是真的生效,你可以试一下,先后执行两次命令#man X ,你就可以明显的感觉到

第二次的开打的速度快很多。


Swap: 当前没有使用任何交换空间,这说明目前没有真正遇到内存问题。系统现在可以全部装入物理内存,而不必借助慢速的基于磁盘的交换

空间。




接下来解释什么时候内存会被交换,以及按什么方交换。
当可用内存少于额定值的时候,就会开会进行交换.
如何看额定值(RHEL4.0):
#cat /proc/meminfo

MemTotal:       507480 kB
MemFree:         10800 kB
Buffers:         34728 kB
Cached:          98852 kB
SwapCached:        128 kB
Active:         304248 kB
Inactive:        46192 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       507480 kB
LowFree:         10800 kB
SwapTotal:      979956 kB
SwapFree:       941296 kB
Dirty:              32 kB
Writeback:           0 kB
AnonPages:      216756 kB
Mapped:          77560 kB
Slab:            22952 kB
SReclaimable:    15512 kB
SUnreclaim:       7440 kB
PageTables:       2640 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   1233696 kB
Committed_AS:   828508 kB
VmallocTotal:   516088 kB
VmallocUsed:      5032 kB
VmallocChunk:   510580 kB





 MemTotal: 所有可用RAM大小 (即物理内存减去一些预留位和内核的二进制代码大小)

     MemFree: LowFree与HighFree的总和,被系统留着未使用的内存

     Buffers: 用来给文件做缓冲大小

      Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ).

  SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小
             已经被交换出来的内存,但仍然被存放在swapfile中。用来在需要的时候很快的被替换而不需要再次打开I/O端口。

      Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.

    Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.

   HighTotal:
    HighFree: 该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。

    LowTotal:
     LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。Among many
              other things, it is where everything from the Slab is
              allocated.  Bad things happen when you're out of lowmem.
        
   SwapTotal: 交换空间的总大小

    SwapFree: 未被使用交换空间的大小

    Dirty: 等待被写回到磁盘的内存大小。
    
   Writeback: 正在被写回到磁盘的内存大小。
 
   AnonPages:未映射页的内存大小
 
   Mapped: 设备和文件等映射的大小。
 
   Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。

   SReclaimable:可收回Slab的大小
 
   SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
 
   PageTables:管理内存分页页面的索引表的大小。
 
   NFS_Unstable:不稳定页表的大小



VmallocTotal: 可以vmalloc虚拟内存大小

VmallocUsed: 已经被使用的虚拟内存大小。

VmallocChunk: largest contigious block of vmalloc area which is free




------------------------vmstat


一般VMSTAT工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。如:

[root@Chinayk proc]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id  wa st
 0  0      0 311044 312596 2450064    0    0     0    6    1    2  0  0 100  0  0
 0  0      0 311044 312596 2450064    0    0     0    0 1014   56  0  0 100  0  0
 0  0      0 311044 312596 2450064    0    0     0    0 1012   53  0  0 100  0  0
 0  0      0 311044 312596 2450064    0    0     0   24 1013   58  0  0 100  0  0
 0  0      0 311044 312596 2450064    0    0     0    0 1016   55  0  0 100  0  0
 0  0      0 311044 312596 2450064    0    0     0    0 1013   56  0  0 100  0  0
 0  0      0 311044 312596 2450064    0    0     0    0 1012   56  0  0 100  0  0
 0  0      0 311044 312596 2450064    0    0     0    0 1012   53  0  0 100  0  0


1 观察磁盘活动情况
磁盘活动情况主要从以下几个指标了解:
bi:表示从磁盘每秒读取的块数(blocks/s)。数字越大,表示读磁盘的活动越多。
bo:表示每秒写到磁盘的块数(blocks/s)。数字越大,表示写磁盘的活动越多。
wa:cpu等待磁盘I/O(未决的磁盘IO)的时间比例。数字越大,表示文件系统活动阻碍cpu的情况越严重,因为cpu在等待慢速的磁盘系统提供

数据。wa为0是最理想的。如果wa经常大于10,可能文件系统就需要进行性能调整了。

  
2 观察cpu活动情况
vmstat比top更能反映出cpu的使用情况:
us:用户程序使用cpu的时间比例。这个数字越大,表示用户进程越繁忙。
sy:系统调用使用cpu的时间比例。注意,NFS由于是在内核里面运行的,所以NFS活动所占用的cpu时间反映在sy里面。这个数字经常很大的话

,就需要注意是否某个内核进程,比如NFS任务比较繁重。如果us和sy同时都比较大的话,就需要考虑将某些用户程序分离到另外的服务器上面

,以免互相影响。
id:cpu空闲的时间比例。
wa:cpu等待未决的磁盘IO的时间比例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值