一、内存占用高是正常现象吗?
在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这方面,区别于 Windows的内存管理。主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux都将能充分利用起来,发挥了硬件投资带来的好处,而Windows只将其做为摆设,即使增加8GB甚至更大。
Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为 cache 和 buffers,以此提高数据访问性能。
页高速缓存(cache)是Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。
磁盘高速缓存的价值在于两个方面:第一,访问磁盘的速度要远远低于访问内存的速度,因此,从内存访问数据比从磁盘访问速度更快。第二,数据一旦被访问,就很有可能在短期内再次被访问到。
二、查看内存使用的正确方法
运行命令free[root@java-test ~]# free -hm
total used free shared buff/cache available
Mem: 7.6G 3.7G 2.8G 956M 1.1G 2.8G
Swap: 0B 0B 0B
详解:
1、total:总的物理内存
2、used:系统使用的内存,包括buff+cache。并非系统真正使用的内存。系统真正使用的内存=used-buff/cache
3、free:空闲的内存,系统未使用的内存,并不是系统启动应用程序可以真正使用的内存。
4、shared:共享内存
5、buff/cache:磁盘缓存的大小
6、available:在旧版free中,没有这个选项。这个选项指的是,系统启动程序时可以利用的内存,当这个选项很小或者不够启动程序所需的内存,会提示系统内存不足,无法启动,此时就需要处理问题,是物理内存真的不足,还是清理系统缓存。
三、清理缓存
当系统内存不足时,用free查看,内存buff/cache占用很多。此时,可清理内存,将缓存数据写入到磁盘,然后清理内存。
1、编写清理脚本
思路:可以判断free中可用内存的大小,放入定时任务,进行实时监控。#!/bin/bash
exec &>> /var/log/mem.log
Free=`free -m|awk 'NR==2 {print $4}'`
if [ $Free -lt 2500 ];then
sync
echo 3 > /proc/sys/vm/drop_caches
fi
可以按照自己的生产环境,进行修改脚本
crontab* * * * * /bin/sh /.Script/mem.sh >/dev/null 2>&1
总结:此博客,如有错误地方,欢迎━(*`∀´*)ノ亻大家积极指出来。