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

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: 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

相关文章
|
15天前
|
域名解析 网络协议 安全
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
|
15天前
|
网络协议 Linux Docker
在Linux中,如何指定dns服务器,来解析某个域名?
在Linux中,如何指定dns服务器,来解析某个域名?
|
15天前
|
域名解析 存储 缓存
在Linux中,DNS进行域名解析的过程是什么?
在Linux中,DNS进行域名解析的过程是什么?
|
15天前
|
域名解析 网络协议 Linux
在Linux中,如何配置DNS服务器?
在Linux中,如何配置DNS服务器?
|
15天前
|
网络协议 Linux
在Linux中,如何改IP、主机名、DNS?
在Linux中,如何改IP、主机名、DNS?
|
15天前
|
域名解析 网络协议 Linux
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
|
15天前
|
缓存 网络协议 Linux
在Linux中,当用户在浏览器当中输入⼀个网站,计算机对dns解释经过那些流程?
在Linux中,当用户在浏览器当中输入⼀个网站,计算机对dns解释经过那些流程?
|
15天前
|
域名解析 缓存 负载均衡
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
|
15天前
|
网络协议 Ubuntu Linux
在Linux中,设置DNS需要修改哪个配置文件?
在Linux中,设置DNS需要修改哪个配置文件?
|
15天前
|
运维 Rust 监控
Linux高效运维必备:fd命令深度解析,文件描述符管理从此得心应手!
【8月更文挑战第23天】本文介绍了一款名为fd的命令行工具,该工具基于Rust语言开发,旨在以更直观的语法和更快的速度替代传统的`find`命令。通过本文,您可以了解到如何安装fd以及一些基本用法示例,比如使用正则表达式匹配文件名、排除特定目录等。此外,文章还展示了如何结合`ps`和`lsof`命令来查找特定文件并显示其文件描述符,从而帮助您更好地管理和监控Linux系统中的文件与进程。
54 0

热门文章

最新文章

下一篇
DDNS