执行free -h命令时,通常会看到这样的输出
其中:
- total是总内存,这个最直观
- used包括了应用程序和缓存使用的内存
- free是完全空闲的内存,通常很小
- buff/cache是可以释放的缓存内存
- available是真正可用的内存,这个最重要
- shared是共享内存,通常不用太关注
total:系统总内存
total就是系统的总物理内存大小,比如8G内存条,这里显示的就是8G(会扣掉一些被内核占用的部分)。
used:已使用内存
used包括了:
- 应用程序实际使用的内存
- 内核使用的内存
- 缓冲区和缓存使用的内存
有时看到used很高,不代表应用程序真的用了那么多内存。很可能是Linux把大量内存用作了文件缓存。
具体查看内存使用情况
/proc/meminfo看详细分解
cat /proc/meminfo | grep -E "(MemTotal|MemFree|MemAvailable|Buffers|Cached|SReclaimable)"
- Buffers就是缓冲区使用的内存
- Cached就是页面缓存使用的内存
- SReclaimable是可回收的内核数据结构
- 把这几个加起来,基本就是free命令里buff/cache那一列的值。
如果Cached特别大,说明系统缓存了很多文件;如果Buffers很大,可能是有大量的磁盘IO操作。
ps命令查看进程内存使用
# 按内存使用量排序显示进程 ps aux --sort=-%mem | head -10 # 或者用这个更直观的格式 ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -10 # 某个应用的总内存使用,比如统计所有java进程的内存使用 ps aux | grep java | awk '{sum+=\$6} END {print "Total memory: " sum/1024 " MB"}'
free:真正空闲的内存
free显示的是完全没有被使用的内存。注意,这里不包括被用作缓冲区和缓存的内存,因为这些内存在需要的时候是可以立即释放给应用程序使用的。
如果经常看到free的值很小,这是正常现象。Linux的设计哲学就是"空闲的内存是浪费的内存",系统会尽可能地把空闲内存用作文件缓存,提高系统性能。
shared:共享内存
shared显示的是被多个进程共享的内存大小。这部分内存主要包括:
- 共享内存段(System V shared memory)
- tmpfs文件系统使用的内存
- 一些其他的共享内存区域
在日常运维中,一般特别关注这个数值。除非某个应用大量使用了共享内存,否则这个值通常不会很大。
比如一些使用Redis的系统,如果Redis配置了大量的共享内存,这个值会比较高。但大多数情况下,这个数字都不是重点关注对象。
buff/cache:缓冲区和缓存
这个是Linux内存管理的精髓所在。buff/cache包括:
- 缓冲区(buffers):用于缓存磁盘块设备的数据
- 页面缓存(page cache):用于缓存文件内容
Linux会把空闲内存用作文件缓存,这样当程序再次读取相同文件时,就可以直接从内存中获取,而不需要再次访问磁盘。这大大提高了系统的IO性能。
关键是,这部分内存在应用程序需要时可以立即释放。所以虽然它们被标记为"已使用",但实际上是可用的。
buff/cache的调整和优化
手动清理缓存(谨慎使用)
注意:生产环境别随便清理,会影响性能。# 清理页面缓存 echo 1 > /proc/sys/vm/drop_caches # 清理所有缓存 sync && echo 3 > /proc/sys/vm/drop_caches调整缓存策略
控制swap使用倾向
# 查看当前值 cat /proc/sys/vm/swappiness # 调整为10(让系统优先回收缓存而不是使用swap) echo "vm.swappiness = 10" >> /etc/sysctl.conf控制缓存回收压力
# 调整目录和inode缓存回收 echo "vm.vfs_cache_pressure = 50" >> /etc/sysctl.conf- 不同场景的优化建议
数据库服务器
vm.swappiness = 1
vm.vfs_cache_pressure = 150文件服务器
vm.swappiness = 10
vm.vfs_cache_pressure = 50调整完要用sysctl -p生效,然后观察系统表现。大多数情况下默认设置就够用了,没事别瞎调。
available:真正可用的内存
这个是最重要的指标!available显示的是应用程序可以使用的内存总量,包括:
- free的内存
- 可以立即释放的buff/cache内存
- 一些其他可回收的内存
- 简单来说,available = free + 可回收的buff/cache
这个数值才是真正需要关注的。只有当available很低的时候,才说明系统内存真的不够用了。判断系统内存是否充足,主要就看这个available值。只要它保持在一个合理的水平,就不用担心内存问题。
评论 (0)