1. free命令
$ free -m
total used free shared buffers cached
Mem: 7869 7057 811 0 638 1049
-/+ buffers/cache: 5369 2499
Swap: 0 0 0
2. Linux 如何使用内存
当应用从磁盘读数据,首先是从磁盘将数据加载到内存之中,如果物理内存不够,则把内存中的部分数据导入到磁盘中,将磁盘的部分空间当做虚拟内存来用,称为Swap.
但如果内存足够且有剩余,则Linux会合理应用这些内存,以提高整体的I/O效率,将剩余内存划分为buffers和cached两部分。
buffers和cached有什么区别呢?
cached -- 读
当应用程序读取某些数据时,这些数据(可能还有这些数据附近的扇区的数据)在用完之后并不一定会被清理,而是存到cached里面,若应用程序再次用到数据会直接从cached读取,避免了重复的磁盘I/O。
buffers-- 写
当应用程序修改了部分数据之后,由于写入磁盘的速度比较慢,可以先把数据存入buffers,应用程序可以继续其它操作,而无需等待数据写入磁盘的操作完成。
当系统需要更多的内存,则会把cache部分擦除,并把buffer中的内容写入磁盘,从而把这两部分内存释放给系统使用。
3. 各个字段的含义
1,total:物理内存实际总量
2,used:这块千万注意,这里可不是实际已经使用了的内存哦,这里是总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
3,free:未被分配的内存
4,shared:共享内存
5,buffers:系统分配的,但未被使用的buffer剩余量。注意这不是总量,而是未分配的量
6,cached:系统分配的,但未被使用的cache 剩余量。buffer 与cache 的区别见后面。
7,buffers/cache used:这个是buffers和cache的使用量,也就是实际内存的使用量,这个非常重要了,这里才是内存的实际使用量哦
8, buffers/cache free:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。千万注意,这里是 三者之和,也就是第一排的 free+buffers+cached,可不仅仅是未被使用的buffers 与cache的和哦,还要加上free(未分配的和)
9,swap,这个我想大家都理解,交换分区总量,使用量,剩余量
4. 生产环境谨慎执行的几个命令
- find
find / | grep "x"
若是服务器文件太多,扫描后这些文件信息都缓存到了slab区。而服务器如果开了swap,操作系统发现物理内存占满后,并没有立即释放cache,导致每次GC,都和硬盘打一次交道。然后,所有服务会不间歇卡顿了。
- vim 打开大文件
vim打开大文件,所有文件的内容都会先加载到内存。结果,内存占满、接着swap也满了,然后oom-killer杀死了服务进程。
网友评论