内存相关

echo1 > /proc/sys/vm/drop_caches:表示清除pagecache

echo2 >  /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存),slab分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的pagecache

echo3> /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象

 

测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息

/proc/meminfo 机器的内存使用信息

/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址

/proc/pid/stam 进程所占用的内存

 

 cat /proc/pid/stam:查看该应用实际使用的内存,第二个参数即为应用实际使用的内存

 

查看机器可用内存

free -h

total      used     free      shared      buffers/cached    available

我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿出来使用的

所以空闲内存=free+buffers+cached=total-used

 

 

下面先解释一下输出的内容:
Mem 行(第二行)是内存的使用情况。
Swap 行(第三行)是交换空间的使用情况。
total 列显示系统总的可用物理内存和交换空间大小。
used 列显示已经被使用的物理内存和交换空间。
free 列显示还有多少物理内存和交换空间可用使用。
shared 列显示被 共享使用的物理内存大小。
buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。
available 列显示还 可以被应用程序使用的物理内存大小。

 

buff/cache
分别是指缓冲区和页高速缓存区

缓存(cache)是在读取硬盘中的数据时,把最常用的数据保存在内存的缓存区中,再次读取该数据时,就不去硬盘中读取了,而在缓存中读取。
缓冲(buffer)是在向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

 

free和availavle区别
free是真正尚未被使用的物理内存,而availavle则不是,如果free空间不够,他就会抢内存和缓冲,回收缓存和缓冲区以供给应用程序的请求

 

交换空间
当物理内存吃紧时,将不经常访问的文件放入交换分区(磁盘)中,但是磁盘读写速度是不高的。所以交换空间也有可能拖累系统速度

 

内核提供了一个叫做 swappiness 的参数,用于配置需要将内存中不常用的数据移到 swap 中去的紧迫程度。这个参数的取值范围是 0~100,0 告诉内核尽可能的不要将内存数据移到 swap 中,也即只有在迫不得已的情况下才这么做,而 100 告诉内核只要有可能,尽量的将内存中不常访问的数据移到 swap 中。

文件/etc/sysctl.conf 可以对交换分区进行修改策略

vm.swappiness=10 将紧迫度调整为10

 

posted @ 2023-02-09 11:35  琴声悠悠-悠悠琴声  阅读(19)  评论(0编辑  收藏  举报