linux单进程最大内存,限制单个Linux进程的内存使用量

我正在运行pdftoppm将用户提供的PDF转换为300DPI图像.这非常有用,除非用户提供的页面大小非常大. pdftoppm将分配足够的内存来在内存中保存该大小的300DPI图像,对于100英寸的方形页面,每像素100 * 300 * 100 * 300 * 4字节= 3.5GB.恶意用户可能只是给我一个愚蠢的大PDF并导致各种问题.

所以我想要做的是对我即将运行的子进程的内存使用量设置一些硬性限制 – 如果它试图分配超过500MB的内存,那么就会让进程死掉.那可能吗?

我不认为ulimit可以用于此,但是有一个单进程等效吗?

解决方法:

超时工具需要安装Perl 5和/ proc文件系统.之后,您将工具复制到例如/usr/local/bin如下:

curl https://raw.githubusercontent.com/pshved/timeout/master/timeout | \

sudo tee /usr/local/bin/timeout && sudo chmod 755 /usr/local/bin/timeout

在那之后,你可以通过内存消耗“笼罩”你的过程,就像你的问题一样:

timeout -m 500 pdftoppm Sample.pdf

或者你可以使用-t< seconds>和-x分别按时间或CPU约束限制进程.

此工具的工作方式是,如果生成的进程没有超额设置其设置边界,则每秒检查多次.这意味着实际上有一个小窗口,其中一个进程可能在超时通知之前超额订阅并杀死进程.

因此,更正确的方法可能涉及cgroups,但即使您使用Docker或runC,它们也需要更多参与设置,这些事件可以提供围绕cgroup的更加用户友好的抽象.

标签:linux,memory,ulimit

来源: https://codeday.me/bug/20190808/1621451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值