linux通过free查看内存解析和swap的设置

简介: linux通过free查看内存解析和swap的设置

1.先了解/proc/meminfo中的各个字段的含义

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-meminfo


2.free命令的分析

计算公式:used=total - free - buffers - cache


total  Total installed memory (MemTotal and SwapTotal in /proc/meminfo)


MemTotal  Total amount of usable RAM, in kibibytes, which is physical RAM minus a number of reserved bits and the kernel binary code.

可用RAM的总量(以千字节为单位),即物理RAM减去一些保留位和内核二进制代码。(可以理解为系统需要占用的)


比如之前遇到的CentOS8的系统通过meminfo查看MemTotal比CentOS7的要少,和内核有关系


used   Used memory (calculated as total - free - buffers - cache)

已经使用的物理内存


free   Unused memory (MemFree and SwapFree in /proc/meminfo)

没有使用的物理内存


shared Memory used (mostly) by tmpfs (Shmem in /proc/meminfo)

主要是tmpfs使用的内存


buffers  Memory used by kernel buffers (Buffers in /proc/meminfo,

Buffers — The amount, in kibibytes, of temporary storage for raw disk blocks.)

还没有来得及写到磁盘上的数据,先放在内存。当系统空闲或者buffer的容量达到一定的大小,再写入磁盘。我们平时执行的sync命令,就是强制把buffers写入到磁盘中


cache  Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)

page cache:缓存从磁盘上读取的数据,以及slabs

SReclaimable — The part of Slab that can be reclaimed, such as caches.

Slab — The total amount of memory, in kibibytes, used by the kernel to cache data structures for its own use.


buff/cache    Sum of buffers and cache

buffers 与 cache的加起来的和


available   Estimation of how much memory is available for starting new applications, without swapping. Unlike the data provided by the cache or free fields, this field takes  into  account  page  cache and also that not all reclaimable memory slabs will be reclaimed due to items being in use (MemAvailable in /proc/meminfo,available on kernels 3.14, emulated on kernels 2.6.27+, otherwise the same as free)

估计有多少内存可用于启动新应用程序而无需使用swap。与由cache或free字段提供的数据不同,此字段考虑了页面缓存,以及由于正在使用的项目,并非所有可回收的slab内存都会被回收,但是是可以被回收后使用的内存。

这个是从应用程序的视角来观察的。


3.swap相关设置


概念:virtual memory (VM) subsystem

swap工作原理是 :当物理内存不够时,在某些在内存当中所占的程序会暂时被移动到 swap 中,让物理内存可以被更需要的程序来优先使用。


(1)设置swap的相关内核参数

主要靠设置swappiness这个文件的值实现

红帽的文档中是如下介绍swappiness的

/proc/sys/vm/swappiness
swappiness — Determines how much a machine should swap. The higher the value, the more swapping occurs. The default value, as a percentage, is set to 60.
Swappiness is a property for the Linux kernel that changes the balance between swapping out runtime memory, as opposed to dropping pages from the system page cache. Swappiness can be set to values between 0 and 100, inclusive. A low value means the kernel will try to avoid swapping as much as possible where a higher value instead will make the kernel aggressively try to use swap space.


在Linux系统中,可以通过查看/proc/sys/vm/swappiness内容的值来确定系统对SWAP分区的使用原则。当 swappiness内容的值为0时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用SWAP分区。当swappiness内容的值为100时,表示积极地使用SWAP分区,并且把内存中的数据及时地置换到SWAP分区。

误区:并不是指当内存使用到百分之swappiness的值,才开始使用swap,swappiness只是计算使用swap的积极程度(swap_tendency)算法中的其中一个值

swap_tendency = mapped_ratio/2 + distress + vm_swappiness

Swap_tendency  < 100,内核会尽量的从page cache中做回收(写回page cache)

Swap_tendency  >=100,内核会尽量交换匿名内存和共享内存。


● mapped_ration : 物理内存的使用百分比。

● distress : 内核尝试释放物理内存的难易程度0-100(page  cache回收的难易程度)。

● vm_swappiness:是我们可以通过/proc/sys/vm/swappiness内核参数调节的值。


可以看出我们可以人为的干预交换内存的交换,但无法准确控制因为有distress参数


  • 查看当前的swappiness的值

cat /proc/sys/vm/swappiness

  • 临时设置

sudo sysctl vm.swappiness=10

  • 永久设置

在/etc/sysctl.conf 文件里添加如下参数:

vm.swappiness=10

sysctl -p生效


(2)创建以及启用swap的步骤如下


一、新建磁盘分区作为swap分区


  1. 以root身份进入控制台(登录系统),输入 swapoff -a #停止所有的swap分区(如有)
  2. 用fdisk命令(例:# fdisk /dev/vdb)对磁盘进行分区,添加swap分区,新建分区,在fdisk中用“t”命令将新添的分区id改为82(Linux swap类型),最后用w将操作实际写入硬盘(没用w之前的操作是无效的)。
  3. mkswap /dev/vdb1 #格式化swap分区
  4. swapon /dev/vdb1 #启动新的swap分区
  5. 为了让系统启动时能自动启用这个交换分区,可以编辑/etc/fstab,加入下面一行
    /dev/vdb1 swap swap defaults 0 0


二、用文件作为Swap分区

1.创建要作为swap分区的文件:增加2GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。

dd if=/dev/zero of=/home/swapfile bs=1M count=2048

2.格式化为交换分区文件:

mkswap /home/swapfile #建立swap的文件系统

3.启用交换分区文件:

swapon /home/swapfile #启用swap文件

4.使系统开机时自启用,在文件/etc/fstab中添加一行:

echo "/home/swapfile swap swap defaults 0 0" >> /etc/fstab


测试

redis-server --test-memory 希望占用的内存大小(MB)

测试使用swap的截图


FYI:

当使用swap时,kswapd0这个进程可能由于分配磁盘交换空间作缓存,导致CPU跑高。


参考文献

https://access.redhat.com/solutions/103833

相关文章
|
9月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
875 0
Linux内存问题排查命令详解
|
缓存 Linux 数据安全/隐私保护
Linux环境下如何通过手动调用drop_caches命令释放内存
总的来说,记录住“drop_caches” 命令并理解其含义,可以让你在日常使用Linux的过程中更加娴熟和自如。
1962 23
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
693 24
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
268 20
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
517 18
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
3473 12
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
2130 25
|
Linux
Linux命令的基本格式解析
总的来说,Linux命令的基本格式就像一个食谱,它可以指导你如何使用你的计算机。通过学习和实践,你可以成为一个真正的“计算机厨师”,创造出各种“美味”的命令。
377 15
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
496 27
|
存储 Linux
Linux内核中的current机制解析
总的来说,current机制是Linux内核中进程管理的基础,它通过获取当前进程的task_struct结构的地址,可以方便地获取和修改进程的信息。这个机制在内核中的使用非常广泛,对于理解Linux内核的工作原理有着重要的意义。
657 11