linux查看内核版本命令 linux查看内存命令


linux查看内核版本命令 linux查看内存命令


简介: Linux系统诊断-内存基础
1. 背景
谈及linux内存,很多时候,我们会关注free,top等基础命令 。当系统遇到异常情况时,内存问题的根因追溯,现场诊断时,缺乏深层次的debug能力 。本篇幅不做深层讨论,能把当前系统的问题描述清楚,是每个SRE应该具备的最基础能力 。
2. free
2.1 free命令原理
free是通过查看 /proc/meminfo 来获取内存的使用情况 。但是 /proc/meminfo 这个文件又是怎么来的?我们先了解下 /proc 目录:
/proc 是一个虚拟文件系统,该目录下的所有文件都是伪文件,该类文件只存在于内存中,并不占用空间——使用 du -sh 即可验证,该模具路下的磁盘占用都是0 。/proc 下的所有文件都是内核调用proc_create() 接口来创建的虚拟条目 。/proc 中的文件,大多反馈系统信息的实时情况(进程、内存、cpu、设备信息等) 。
结论: /proc/meminfo 是 /proc 文件系统下保存你内存相关信息的"伪文件" 。
2.2 命令输出简介
每个发行版输出都有一定差异,我们以debian8 4.19.x发行版为例 。
root@4f996feeb851:~# free -m
totalusedfreesharedbufferscached
Mem:19911909814155836
-/+ buffers/cache:9171073
Swap:102311022
大部分的命令输出意思,大家可以在man文档中找到解析,这里不做赘述 。
used: 已使用的内存 used = total – free -buffers -cachedfree: 未使用的内存 memFree & swapFree in /proc/meminfoshared: tmpfs使用的内存 shmem in /proc/meminfobuffers:被内核缓冲去使用的内存cached: 被页缓存和slabs使用的内存buffers/cache: 表示buffers和cache的总和swap: 交换分区的使用量
2.3 buffer和cache会使用内存吗?
答案是肯定的,先来了解下buffer和cache 。
cache(缓存)官方定义是用来弥补高速设备和低速设备之间的访问速度不匹配而预留的一段空间,用来加快资源的访问 。简单讲就是读的更快 。buffer(缓冲)是为了做资源写入整形,计算机遇到大量的“小规模IO”时,会将其整形为少量的“大规模IO”,降低写入次数 。从而达到“写资源”合理利用的效果 。
然而,free命令所展示的buffer和cache 有点狭义的意思——free展示的buffer表示 块设备所占用的缓存 、free展示的cache表示普通文件占用的the page cache(缓存页)。
总之,buffer和cache使用的内存都是用来加速Linux读写性能,如果有新的进程需要内存,系统会将buffer和cache占用的内存回收,并重新分配给进程使用 。
2.4 其他内存概念
RSS & VSZ & PSS & USS
RSS(Resident Set Size):进程实际使用的物理内存大小,包括sharedMem 。VSZ(Virtual Memory Size):进程所有能够访问到的内存大小,包括因为缺页中断,被swap出去的内存大小,以及sharedMem 。PSS(Proportional Set Size):按照比例将内存的大小加到RSS中 。USS(Unique Set Size):进程独占的物理内存大小 。
usedMem分为 active & inactive
active:表示这部分的内存正在被某个特定的进程使用,不太可能被收回 。inactive:表示这部分内存是被分配到某个不在running状态的进程,有可能会被回收 。
Linux会维护一个LRU List用来管理活动页和非活动页的回收 。简单讲,越接近该List的末尾,该页面被回收的概率就越大,反之,越接近列首,则更不易被回收 。linux内核会维护两类LRUList——active list和inactive list,刚访问过的页面放入active list,长时间未访问的页面放入inactive list,内核线程kswapd会定期将active list中的页面移至?inactive list中 。
如果系统的inactive的内存过大,可以通过如下操作对其做回收 。sync; echo 3 > /proc/sys/vm/drop_caches

推荐阅读