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

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 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

相关文章
|
10月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
915 0
Linux内存问题排查命令详解
|
缓存 Linux 数据安全/隐私保护
Linux环境下如何通过手动调用drop_caches命令释放内存
总的来说,记录住“drop_caches” 命令并理解其含义,可以让你在日常使用Linux的过程中更加娴熟和自如。
1988 23
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
515 27
|
消息中间件 Linux
Linux中的System V通信标准--共享内存、消息队列以及信号量
希望本文能帮助您更好地理解和应用System V IPC机制,构建高效的Linux应用程序。
614 48
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10628 2
|
存储 IDE Java
java设置栈内存大小
在Java应用中合理设置栈内存大小是确保程序稳定性和性能的重要措施。通过JVM参数 `-Xss`,可以灵活调整栈内存大小,以适应不同的应用场景。本文介绍了设置栈内存大小的方法、应用场景和注意事项,希望能帮助开发者更好地管理Java应用的内存资源。
955 4
|
缓存 NoSQL Linux
Linux系统内存使用优化技巧
交换空间(Swap)的优化 禁用 Swap sudo swapoff -a 作用:这个命令会禁用系统中所有的 Swap 空间。swapoff 命令用于关闭 Swap 空间,-a 参数表示关闭 /etc/fstab 文件中配置的所有 Swap 空间。 使用场景:在高性能应用场景下,比如数据库服务器或高性能计算服务器,禁用 Swap 可以减少磁盘 I/O,提高系统性能。
614 3
|
缓存 Linux
Linux查看内存命令
1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h • -h 选项:以易读的格式(如GB、MB)显示内存大小。 输出示例: total used free shared buff/cache available Mem: 15Gi 4.7Gi 4.1Gi 288Mi 6.6Gi 9.9Gi Swap: 2.0Gi 0B 2.0Gi • to
3551 2
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
930 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1517 29