目录
- 前言
- 1. 基本知识
- 1.1 free
- 1.2 cat /proc/meminfo
- 1.3 slabtop
- 2. 清空内存
前言
本篇文章主要分析内存
如果是磁盘空间,推荐阅读:服务器出现根目录磁盘满了解决方法
1. 基本知识
在Linux系统中,查看内存的基本知识包括以下几个方面:
- 总内存和可用内存:
free
来查看系统的内存使用情况
free命令会显示系统的总内存、已用内存、空闲内存以及缓冲区和缓存等信息
# 更易读的方式显示内存信息,包括单位为 MB 或 GB
free -h
- 详细的内存信息:
cat /proc/meminfo
命令来查看更详细的内存信息
# 关于内存的各种统计数据,如内存总量、空闲内存、已使用内存、缓冲区和缓存等。
cat /proc/meminfo
- 进程内存使用情况:
top
或htop
命令来实时监视系统的进程和其内存使用情况
# 每个进程的内存占用情况以及系统总体的内存使用情况。
tophtop
- 内存交换分区(Swap):除了物理内存外,Linux系统还可以使用交换分区来扩展内存空间。使用
swapon
和swapoff
命令来启用或禁用交换分区,以及swapon -s
命令来查看当前系统中启用的交换分区情况
# 列出当前系统中启用的交换分区及其使用情况
swapon -s
使用如上命令,了解系统的整体内存使用情况,以及各个进程的内存占用情况,从而更好地管理和优化系统的内存资源
1.1 free
free
命令默认以 KB 为单位显示内存使用情况free -m
命令以 MB 为单位显示内存使用情况free -h
命令以更易读的方式显示内存使用情况,同时自动将内存单位调整为适当的大小(GB、MB 或 KB),使输出更加易读
输出的参数如下:
total
: 总内存量used
: 已使用的内存量free
: 空闲的内存量shared
: 用于共享内存的内存量buff/cache
: 用于缓冲和缓存的内存量,这包括了Linux系统的文件系统缓存和页缓存等available
: 可用内存量,这是系统中实际可以立即分配给进程使用的内存量。它取决于系统内核对内存的管理策略,包括了剩余的空闲内存和缓冲、缓存等可被清理的内存
而对于Swap部分:
Swap total
: 交换分区总量Swap used
: 已使用的交换分区量Swap free
: 空闲的交换分区量
可用内存 (available) 是最关键的一项,反映了系统当前可以被应用程序使用的实际内存量
1.2 cat /proc/meminfo
显示系统中内存的详细信息,包括各种内存统计数据
以下是输出的一些常见字段及其含义:
-
MemTotal
: 总内存量,表示系统中物理内存的总量 -
MemFree
: 空闲内存量,表示系统中当前未被使用的内存量 -
MemAvailable
: 可用内存量,表示系统中实际可以立即分配给进程使用的内存量,包括了剩余的空闲内存和缓冲、缓存等可被清理的内存 -
Buffers
: 缓冲区使用量,表示用于缓存块设备数据的内存量 -
Cached
: 缓存使用量,表示用于缓存文件系统的内存量 -
SwapTotal
: 交换分区总量,表示系统中交换分区的总大小 -
SwapFree
: 空闲的交换分区量,表示系统中当前未被使用的交换分区大小 -
Dirty
: 脏页的数量,表示已被修改但尚未被写入磁盘的内存页数量 -
Writeback
: 等待写回磁盘的内存页数量 -
Inactive(anon)
: 非活跃的匿名内存页数量 -
Inactive(file)
: 非活跃的文件缓存页数量 -
Unevictable
: 无法被移除的内存页数量 -
Mlocked
: 被锁定的内存页数量 -
AnonPages
: 匿名内存页数量,表示被进程使用但没有对应文件的内存页数量 -
Shmem
: 共享内存的大小,表示已被共享的内存页数量 -
HugePages_Total
: 总的大页(HugePage)数量 -
HugePages_Free
: 空闲的大页数量 -
Hugepagesize
: 大页的大小
1.3 slabtop
显示内核 SLAB 内存分配器统计信息的工具
以下是 slabtop 的一些重要信息以及它们的含义:
OBJS
: 此处显示的是缓存中对象的数量。CACHE SIZE
: 缓存中对象的总大小。OVH
: 超额的缓存(overhead)大小,这是用于管理缓存的额外开销。P
: 缓存对象的页数。NALLOC
: 尚未被分配的对象的数量。ALLOC
: 分配的对象的数量。%ALLOC
: 分配的对象占总数的百分比。%MEM
: 此缓存的内存使用量占总内存的百分比。NAME
: 缓存的名称
通过观察 slabtop 的输出,您可以了解系统中各种缓存的使用情况,以及这些缓存所占用的内存量。这对于诊断系统性能问题和了解系统内存使用情况非常有帮助。
2. 清空内存
在Linux系统中,清空内存通常用于释放系统中的缓存以及未使用的内存页,以便提高系统的性能
这种操作在某些情况下可能很有用,例如在进行性能测试或者遇到系统资源不足的情况下
以下是与清空内存相关的知识点以及相关命令的解释:
-
sync
命令:
sync 命令用于将缓冲数据写入磁盘,并且等待写入完成。它确保所有未写入的数据都被刷新到磁盘中,从而避免数据丢失或损坏 -
echo 3 > /proc/sys/vm/drop_caches
:
用于通过写入特定的值到/proc/sys/vm/drop_caches
文件来清空系统中的页缓存、目录项缓存以及索引节点缓存
具体来说,这个命令通过向 /proc/sys/vm/drop_caches
文件中写入以下数字来执行不同的操作:
- 0:清除页面缓存(page cache)
- 1:清除目录项和索引节点缓存
- 2:清除页面缓存以及目录项和索引节点缓存
- 3:在上述所有内容的基础上执行清空操作
这个命令通常需要 root 权限才能执行。清空缓存可以帮助释放系统中的内存并提高性能,但在生产环境中应谨慎使用,因为这可能会导致性能下降,尤其是在大量磁盘 I/O 操作期间