如何限制Linux内存的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何限制Linux内存的使用相关的知识,希望对你有一定的参考价值。

参考技术A swap是一块磁盘空间或者一个本地文件
/proc/sys/vm/swappiness 可以设置服务器使用 swap 的积极程度。取值范围为0-100,值越大,越积极使用swap,更倾向于回收匿名页;值越小,越消极使用swap,更倾向于回收文件页。
即使swap设置为0,当剩余内存+文件页小于页高阈值( pages_high )的时候,也会发生swap

Linux有专门的内核线程 kswapd0 定期回收内存,为了衡量内存的使用情况, kswapd0 定义了三个内存阈值:页最小阈值 pages_min 、页低阈值 pages_low 和页高阈值 pages_high ,剩余内存使用 pages_free 表示。
kswapd0 定期扫描内存的使用情况,并根据剩余内存和这三个阈值的关系进行内存回收操作。
pages_free < pages_min :进程可用内存耗尽,只有内核才可以分配内存
pages_min < pages_free < pages_low :内存压力较大, kswapd0 会执行内存回收,直到剩余内存大于高阈值为止
pages_low < pages_free < pages_high :内存有一定压力,但还可以满足新内存请求
pages_free > pages_high :剩余内存较多,没有内存压力。
这些阈值可以通过内核选项来 proc/sys/vm/min_free_kbytes 间接设置。 min_free_kbytes 设置了页最小阈值( pages_min )。 pages_low=pages_min*5/4 , pages_high=pages_min*3/2

/etc/security/limits.conf
通过这个配置文件可以对每个登录的会话进行限制,这种限制不是全局的,也不是永久的,只在会话期间起作用。
通常,对单个用户的限制优先级高于对用户组的限制

可以使用以下方式限制内存使用

语法
<domain> <type> <item> <value>

详见 limits.conf(5) - Linux man page

/proc/sys/vm/overcommit_memory 控制内核使用虚拟内存的模式,可以设置为以下值

如何限制脚本的内存使用?

我使用的脚本消耗了大量的ram内存,以至于它会冻结我的计算机并出错。

你怎么能限制这个特定脚本的内存使用量?

我用debian 9(linux)

谢谢。

这是基本脚本

path="/home/xxx"
mesMenosUnDia=$(date +%m --date='-1 month')
fecha=$(date +"%Y-$mesMenosUnDia-%d")

echo "find"
list=$(find /home/xxx -type f)
listArray=($list)


for i in "${listArray[@]}"
do
        onlyDate=$(echo $i | grep -P 'd{4}-d{2}-d{2}' -o)
        if [[  $onlyDate < $fecha ]];then

                rm $i
        else

        fi
done
答案

您可以限制与ulimit一起使用的最大内存。缺点是脚本将达到极限并死亡。但是你的计算机不会挂起,因为当脚本要求太多内存时,它会被杀死。

您的脚本使用了太多内存,因为您在内存中存储了太多内容。具体来说,您将find命令的输出捕获到一个变量中,然后将所有这些数据复制到一个数组中,这样整个内容就会重复。

而不是将所有内容保存在内存中,将其放入磁盘。

path="/home/xxx"
mesMenosUnDia=$(date +%m --date='-1 month')
fecha=$(date +"%Y-$mesMenosUnDia-%d")

echo "find"
find /home/xxx -type f > tmp


for i in $(<tmp)
do
        onlyDate=$(echo $i | grep -P 'd{4}-d{2}-d{2}' -o)
        if [[  $onlyDate < $fecha ]];then

                rm $i
        else

        fi
done

rm tmp

以上是关于如何限制Linux内存的使用的主要内容,如果未能解决你的问题,请参考以下文章

如何限制单个 Linux 进程的内存使用而不杀死该进程

在 Linux 中限制用户可用的内存和 CPU

如何破解mssql for linux 3.5G内存的限制

如何在 Linux 上超过 64 位 LuaJIT 的 1gb 内存限制?

限制Linux下R中的内存使用

Linux进程内存如何管理?