返回顶部
首页 > 资讯 > 操作系统 >Linux系统诊断之内存基础方法讲解
  • 790
分享到

Linux系统诊断之内存基础方法讲解

2023-06-09 11:06:27 790人浏览 薄情痞子
摘要

本篇内容介绍了“linux系统诊断之内存基础方法讲解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.背景谈及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  total used free shared buffers cachedMem:  1991 1909  81  4 155 836-/+ buffers/cache: 917 1073Swap:  1023  1 1022

大部分的命令输出意思,大家可以在man文档中找到解析,这里不做赘述。

  • used: 已使用的内存 used = total - free -buffers -cached

  • free: 未使用的内存 memFree & swapFree in /proc/meminfo

  • shared: tmpfs使用的内存 shmem in /proc/meminfo

  • buffers:被内核缓冲去使用的内存

  • 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

3. 虚拟内存

现代x86系统,计算机能够使用的内存会大于其物理内存的上限,依靠的就是虚拟内存机制。Linux支持虚拟内存机制和实模式机制。

实模式下,计算机会直接申请物理内存, 虚拟内存机制下,系统会把磁盘当成内存的扩展,已增加可使用的内存大小。并通过映射map的机制,来保存和物理内存的真实对应关系。

在磁盘和内存之间传送Page的活动叫做swapping或者页面调度(paging),被用作虚拟内存的磁盘分区称为swap。

可以通过在线添加swap的方式临时缓解内存不足的问题,但一般不能直接作在线减少swap的操作,很有可能导致进程的crash。具体swap配置方式见5.1swap相关配置。

4. OOM

1.What is OOM?

Out Of Memory Killer 是 Linux 的一种系统保护机制,在系统内存紧张时,kill掉某些进程防止系统卡死。系统通过打分机制,来实施对进程的杀死操作。默认机制是通过扫描所有进程的内存占用,cpu占用等因素,然后打分  (badness),分数越高,进程被kill的优先级就越高。

2.哪些行为会让系统对进程进行打分?

  • 进程使用fork(2)调用,创建众多子进程时,会加分(+)

  • 进程已经运行了很长时间,或者和使用了大量的CPU时间,会减分(-)

  • 进程的nice值如果比较低,会加分(+)

  • 进程如果是特权进程(privileged),会减分(-)

  • 进程如果对硬件设备进行直接访问,会减分(-)

3.在哪儿可以看到进程的打分?

/proc/<pid>/oom_score

4.手动调整分数

/proc//oom_adj 该文件可以用于调整在oom发生时,哪些进程应该被kill,范围-16 -- +15 ,默认值为0,  

特殊值-17:表示进程永远不会被kill。

5.我怎么知道系统有没有触发过OOM?

/var/log/messages 、 /var/log/syslog 系统日志或者 dmesg 系统日志诊断工具等都能够找到

5. 内存相关配置

5.1 swap相关配置

通过调节系统参数,来告诉计算机使用swap分区的权重

1. 简介swappiness范围0-100,默认600: 表示禁止使用swap60: 默认100: 疯狂使用swap 2. 操作方法# sysctl vm.swappiness=VALUE# sysctl vm.swappiness=20或者# echo VALUE > /proc/sys/vm/swappiness# echo 30 > /proc/sys/vm/swappiness

通过在线增加swap分区大小,临时控制内存泄露,内存不够用等异常。

1. 需要root用户2. 创建存储文件# dd if=/dev/zero of=/home/swap2G bs=1024 count=2M3. 安全设置# chown root:root /home/swap2G# chmod 0600 /home/swap2G4. 创建liunx交换分区# mkswap /home/swap2G5. enable 交换分区# swapon /home/swap2G6. 更新fstab文件【注意: 部分操作系统不需要】# vim /etc/fstab/home/swap2G none swap sw 0 07. 检查是否生效#free -m8. 卸载swap分区# swapoff /home/swap2G

5.2 缓存相关

sync; echo 3 > /proc/sys/vm/drop_caches 0:不释放1:释放页缓存2:释放 dentries 和 inodes3:释放所有缓存

5.3 OOM相关

  • vm.panic_on_oom

  • 是否在触发 oom 机制时触发 kernel panic。0表示关闭(推荐),1表示打开。 kernel panic是指计算机遇到了致命的错误,并且他不知道该怎么处理时的一种动作——可以类比windows的蓝屏。 我们当然不希望每次计算机在oom时就直接蓝屏。推荐设置为0

  • vm.overcommit_kbytes:

  • 用于限制进程能够申请的最大内存,0表示不设置,如果设置其他数值,比如400,则进程能够申请到的最大内存为 swap+400kBytes

  • vm.overcommit_ratio:

  • 定义了进程可以使用的最大内存(百分比模式),默认为50。表示配置50之后,进程不允许申请超过 swap + 50% * 物理内存总量 以上的内存

  • vm.oom_kill_allocating_task (Linux 2.6.24+支持)

  • 这在内存不足的情况下启用或禁用杀死OOM触发任务。0表示禁用(默认),1表示启用。可以理解为oom机制的开关,默认为禁用——表示要让oom触发器正常执行。

  • 其他有兴趣的话,可以自行man proc

“Linux系统诊断之内存基础方法讲解”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Linux系统诊断之内存基础方法讲解

本文链接: https://www.lsjlt.com/news/255749.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Linux系统诊断之内存基础方法讲解
    本篇内容介绍了“Linux系统诊断之内存基础方法讲解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.背景谈及linux内存,很多时候,我们...
    99+
    2023-06-09
  • Linux系统诊断之内存基础深入详解
    1.背景 谈及linux内存,很多时候,我们会关注free,top等基础命令。当系统遇到异常情况时,内存问题的根因追溯,现场诊断时,缺乏深层次的debug能力。本篇幅不做深层讨论,能把当前系统的问题描述清楚,是每个SRE...
    99+
    2022-06-04
    Linux系统诊断 Linux内存基础
  • win8系统内存诊断功能使用图解
      使用Windows内存诊断工具:   按照上面的提示,我们选择推荐项默认的第一个,保存好现在需要保存的文档和工作后我们点击:立即重新启动并检查问题(推荐)   所有的操作都是自动的,此后计算机会重启,...
    99+
    2022-06-04
    内存 功能 系统
  • ASP.NET Core基础之Main方法讲解
    为什么ASP.NET Core采用Main方法? 需要记住的最重要的一点是,ASP.NET Core Web 应用程序最初作为控制台应用程序启动,Main() 方法是应用程序的入口点...
    99+
    2024-04-02
  • Linux系统中bash shell编程的10个基础问题讲解
    第1问:为何叫做shell? 在介绍 shell 是什么东西之前,不妨让我们重新审视使用者与电脑的关系。我们知道电脑的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱动只能透过一个称为“操作系统(...
    99+
    2022-06-04
    基础 系统 Linux
  • win7系统诊断策略服务无法打开解决方案
      故障现象:   联想扬天一体机S700,安装专业财务管理软件需要打开诊断策略服务调试系统,需要由于优化过度,导致Windows 7系统的诊断策略服务被禁用无法打开。   原因分析:   由于使用了一些优化软件,Win...
    99+
    2023-05-29
    win7 诊断策略 服务 解决 方案 系统诊断 策略
  • R语言基础统计方法图文实例讲解
    tidyr > tdata <- data.frame(names=rownames(tdata),tdata)行名作为第一列 > gather(tdata...
    99+
    2024-04-02
  • Win10系统网络诊断工具在哪?Win10系统诊断工具解决上网问题的使用方法图文教程
    在电脑使用中,我们经常会遇到一些莫名的网络问题,比如“连接不可用”、“找不到可用网络”或者是“网络连接受限”。导致网络不可用,有时候是网络本身的问题...
    99+
    2023-05-22
    win10网络修复工具 win10无法连接wifi
  • Linux系统之升级内核版本方法
    Linux系统之升级内核版本方法 一、检查本地系统环境1.检查系统版本2.检查系统内核版本 二、小版本升级内核1.列出yum仓库的内核包版本2.升级内核3.重启并检查内核版本 三、大版本升级内核1.导入公钥2.下载并安装el...
    99+
    2023-08-18
    linux 运维 服务器 kernel
  • JavaScript基础系列之函数和方法详解
    目录一、函数和方法的区别二、如何写好一个函数2.1 命名准确2.1.1 函数命名2.1.2 参数命名2.2 函数注释2.2.1 参数注释2.3  函数参数2.3.1 参数默...
    99+
    2024-04-02
  • Linux系统中查看内存有哪些方法
    小编给大家分享一下Linux系统中查看内存有哪些方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法1:free命令由于free命令是最广泛使用的,毫无疑问是最...
    99+
    2023-06-27
  • Linux系统内存占用过高排查方法
    以下以Ubuntu系统为例,内存占用过高可能是因为某个进程或程序占用了过多的内存,您可以按照以下步骤进行排查: 以上是一些基本的排查步骤,它们可以帮助您确定内存占用过高的原因,并采取相应的措施解决问题。 使用 top 命令查看系统当前...
    99+
    2023-09-12
    linux 运维 服务器
  • Linux内存文件系统tmpfs的使用方法
    本篇内容主要讲解“Linux内存文件系统tmpfs的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux内存文件系统tmpfs的使用方法”吧!一、/dev/shm理论默认的Linux...
    99+
    2023-06-13
  • 举例讲解Linux系统下Python调用系统Shell的方法
    时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 1.1...
    99+
    2022-06-04
    系统 方法 Linux
  • Linux系统中查看内存的方法有哪些
    小编给大家分享一下Linux系统中查看内存的方法有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1./proc/meminfo查看 RAM 使用情况最简单的方法是通过 /proc/meminfo。这个动态更新的虚拟文件...
    99+
    2023-06-27
  • Linux操作系统的内存管理方法是什么
    这篇文章主要讲解了“Linux操作系统的内存管理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux操作系统的内存管理方法是什么”吧!在Linux下查看内存我们一般用comma...
    99+
    2023-06-17
  • jmeter在linux系统下运行及本地内存调优的方法详解
    1.在linux系统下安装跨系统传输文件工具  root用户下 根目录输入 yum -y install lrzsz 2.把apache-jmeter-4.0zip包 用rz命令上传到linux系统的根目录下 解压 ...
    99+
    2022-06-04
    jmeter在linux系统运行 jmeter内存调优
  • win10系统下360rp.exe占用内存高的解决方法
    如果你的Windows 10系统下的360rp.exe占用内存高,可以尝试以下解决方法:1. 结束进程:右键点击任务栏,选择“任务管...
    99+
    2023-09-16
    win10
  • AI系统内存不足的解决方法有哪些
    解决AI系统内存不足的方法有以下几种:1. 增加物理内存:可以在服务器上增加更多的内存条或更换容量更大的内存模块。2. 优化算法和数...
    99+
    2023-10-08
    AI
  • winxp系统虚拟内存修改方法图文详解
      虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空骤   右键我的电脑,点菜单中的属性,如图      在性能框中点击设置键,如图   在弹出的窗口中的上方点...
    99+
    2023-05-31
    winxp 虚拟内存 修改 方法 系统
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作