首页 > 系统相关 >Linux的free命令与OOM的简单总结

Linux的free命令与OOM的简单总结

时间:2022-12-10 13:32:15浏览次数:39  
标签:OOM cache vm free oom 内存 Linux

简介

查看操作系统配置最关键的几个命令是
lscpu 查看CPU信息
以及free 查看内存信息.
不过free信息有一个疑惑点
他的 free的值可能很小. 会让搭建产生误解.
这里简单说明一下.

free

free -m 
可以简单的以 MBytes 为单位展示系统的内存使用情况.
free -m
total used free shared buff/cache available
Mem: 31867 9502 9110 241 13254 21670
Swap: 16127 0 16127

# Mem 指代是物理内存. Swap指代的是虚拟内存或者称之为在磁盘上通过换页出去的内存.
# 需要注意 Swap 与虚拟内存系统完全不一样. Swap里面的内存使用时会出现pageout的中断
# 使用Swap会导致严重的性能衰退. 访问延迟会从 120nm 升级到 10ms, 出现多个数量级的差距.

# total 全部安装的内存, 一般会比2的n次方小一点.有部分保留内存.
# used 一般可以理解内 所有的程序commited 的内存数据量.
# free 就可以程序随后可以使用的量.
# shared 共享的内存
# buff/cache 是一个关键, 他一般指的 page cache,inodes缓存dentries缓存 三部分.
# available 是可以给空闲使用的内存数据量, 基本上等于free+buff/cache

清理buffer/cache

可以使用 sync &&  echo 3 >/proc/sys/vm/drop_caches 的方式进行buff/cache的清理
可以查看解释
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
## pagecache 可以理解为一开始说的 读缓存和写buffer. linux最新系统已经将两者进行了合并.
## inodes 指的是file 文件的缓存信息
## dentries 指的是文件系统目录的缓存信息.

注意为了防止数据丢失 最好是先使用 sync 执行一下再进行相应的 echo 操作.

内存over-commited的处理

Linux允许内存提交的数量比实际内存数量要高
有时候机器内存比较小,启动服务报错时可以临时处理一下.
但是不建议生产如此出现, 容易导致OOM
修改方法:
1. 永久生效:
vi /etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 生效
2. 临时处理:
sysctl vm.overcommit_memory=1 或
sysctl -w vm.overcommit_memory=1
echo 1 > /proc/sys/vm/overcommit_memory

参数的含义为:
0: 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,
内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1: 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2: 表示内核允许分配超过所有物理内存和交换空间总和的内存。

减少缓存的使用

buff/cache 其实对系统的性能能够产生正向的效果.
他将缓慢磁盘里的数据暂存到内存中, 可以极大的提高系统的性能.
尤其是小白开发开发的程序写入大量日志时,能够减少IO导致的开销,提高系统性能.

但是他使用的过多, 也对java程序进行heap区域malloc产生异常.
所以也需要进行优化与调整.

可以在/etc/sysctl.conf中添加如何内容,禁止使用缓存
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3

Study From https://blog.51cto.com/bronte/1220005
# 注意可以swapoff -a 关闭虚拟内存, 可以避免使用swap造成性能下降
# 但是会极大的提高OOM产生的概率.
vm.swappiness=0:表示最大限度使用物理内存,然后使用swap
vm.swappiness=100:表示积极的使用swap分区。
vm.swappiness=60:默认值

OOM的产生

因为linux支持可以overcommit 所以会导致应用服务器生产的内存超过总数.
系统为了保证稳定性,不得已就会杀掉部分内存大的程序就会产生OOM
查看的方法:
dmesg |grep -i oom
如果有 很明显就可以看到.

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。
因为申请内存后,并不会马上使用内存。这种技术叫做 Overcommit。
当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。
它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。

当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数
(在mm/oom_kill.c中),该 函数会计算每个进程的点数(0~1000)。
点数越高,这个进程越有可能被杀死。
每个进程的点数跟oom_score_adj有关,而且 oom_score_adj可以被设置(-1000最低,1000最高)。

如何防止OOM

如果用户将该进程的 oom_score_adj 设定成 -1000,表示禁止OOM killer 杀死该进程
注意不能随便这样设置, 会导致自己的服务器核心服务挂起,导致宕机.
不过你的服务绝对重要, 开发又不是很差, 你可以尝试一下.

修改方法为:
echo -1000 > /proc/$pid/oom_score_adj

注意这个数值是可以修改的 -1000 表示最重要. 他会影响. oom_score的数值.
具体可以参考:
https://www.jianshu.com/p/bbaeff371019



标签:OOM,cache,vm,free,oom,内存,Linux
From: https://blog.51cto.com/u_11529070/5927565

相关文章

  • 查看Linux服务器日志
    cat日志文件|grep-C5'关键字'--查看关键字前后5行的日志cat-n日志文件|grep-C5'关键字'--查看带有行号的关键字前后5行日志--------------------待更新-......
  • Linux命令后面常见的>/dev/null 解释
     文件描述符①文件描述符是与文件输入、输出关联的整数。它们用来跟踪已打开的文件。最常见的文件描述符是stidin、stdout、和stderr。我们可以将某个文件描述符的内容重定......
  • Linux操作系统之Linux命令的返回值
    前言①Linux操作系统中,无论是启动桌面程序还是在控制台终端执行命令,所有的程序在结束时,都会返回一个数字值,这个值叫做返回值,或者称为错误号( ErrorNumber )②在控制台终端......
  • Linux源基本介绍及Opensuse更换国内源
    源就是在网络上下载文件的地方,也可以叫供应源、储存库、仓库、应用商店等。 1.源分类根据是否联网分为:(1)离线源    DVD或U盘,这种是离线源。(2)在线源    添......
  • ubuntu linux pip安装报错 TypeError: expected string or bytes-like object
     File"/usr/share/python-wheels/packaging-17.1-py2.py3-none-any.whl/packaging/specifiers.py",line703,incontains  item=parse(item) File"/usr/shar......
  • Linux基础-学会使用命令帮助
    Linux命令及其参数繁多,大多数人都是无法记住全部功能和具体参数意思的。在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助......
  • Linux 基础-文件及目录管理
    在Linux中一切皆文件。文件管理主要是涉及文件/目录的创建、删除、移动、复制和查询,有mkdir/rm/mv/cp/find等命令。其中find文件查询命令较为复杂,参数丰富,功......
  • Linux 基础-新手必备命令
    Linux新手必备命令:tar、grep、which、find、cut等。Linux基础-新手必备命令概述常见执行​​Linux​​命令的格式是这样的:命令名称[命令参数][命令对象......
  • Linux系统zabbix_agentd客户端安装与配置
    官网下载zabbix安装包(zabbix安装包里包含了zabbix_agentd客户端安装包,我们只选择zabbix_agentd客户端安装) zbbix官网下载地址:  ​​http://www.zabbix.com/download​......
  • Linux 安装
    所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别......