我如何将Linux二进制文件限制为有限的RAM数量?

我如何将Linux二进制文件限制为有限的RAM数量?,第1张

概述我希望能够限制已安装的二进制文件只能使用一定数量的RAM.如果它超过它,我不希望它被杀死,只有那将是它可以使用的最大数量.一旦达到一定量的RAM,我希望这个过程能够死掉,最好是在服务器开始大量交换之前. 我面临的问题是我正在运行一个带有PHP的Apache 2.2服务器和一些开发人员为我们编写的自定义代码.问题是,在代码中的某个地方,他们启动了一个PHP exec调用,启动ImageMagick的 我希望能够限制已安装的二进制文件只能使用一定数量的RAM.如果它超过它,我不希望它被杀死,只有那将是它可以使用的最大数量.一旦达到一定量的RAM,我希望这个过程能够死掉,最好是在服务器开始大量交换之前.

我面临的问题是我正在运行一个带有PHP的Apache 2.2服务器和一些开发人员为我们编写的自定义代码.问题是,在代码中的某个地方,他们启动了一个PHP exec调用,启动ImageMagick的’convert’来创建一个调整大小的图像文件.

我不了解项目或代码的大量细节,但需要找到一种解决方案,防止它们杀死服务器,直到找到优化代码的方法.

我以为我可以用/etc/security/limits.conf和apache用户设置限制来做这件事,但似乎没有效果.这是我用过的:

www-data hard as 500

如果我理解正确,这应该将任何apache用户进程限制到最大500kb,但是,当我运行一个会咀嚼大量内存的测试脚本时,实际上在我杀死之前它已达到1.5GB.以下是设置更改和系统重启后’ps auxf’的输出:

USER       PID %cpu %MEM    VSZ   RSS TTY      STAT START   TIME COMMANDroot      5268  0.0  0.0 401072 10264 ?        Ss   15:28   0:00 /usr/sbin/apache2 -k startwww-data  5274  0.0  0.0 402468  9484 ?        S    15:28   0:00  \_ /usr/sbin/apache2 -k startwww-data  5285  102  9.4 1633500 1503452 ?     Rl   15:29   0:58  |   \_ /usr/bin/convert ../tours/28786/.….www-data  5275  0.0  0.0 401072  5812 ?        S    15:28   0:00  \_ /usr/sbin/apache2 -k start

接下来我想我可以用Apache的RlimitMEM设置来做到这一点,但得到的结果并没有受到限制.这是我在apache.conf文件中的内容:

RlimitMEM 500000 512000

直到很多个小时之后,我才发现,如果这个过程实际上达到了这个数量,它会因OOM错误而消亡.

会喜欢任何关于如何设置这个限制的想法,以便其他东西可以在服务器上运行,并且所有这些都可以很好地一起玩.

解决方法 创建一个新用户,仅适用于ImageMagick.给它你想要的内存限制.以某种方式设置sudoers文件,Apache可以将ImageMagick称为此用户.更改PHP代码中的exec()调用以通过sudo运行转换或使用包装脚本替换原始转换二进制文件.如果ImageMagick占用了所有内存,就让它死掉,让PHP脚本抛出相应的错误消息.

或者将ImageMagick全部替换在一起,这是一个纯粹的记忆力(尝试将小图片拼凑在一起.在某一点上,你会记住为什么你仍然有一个交换分区).

总结

以上是内存溢出为你收集整理的我如何将Linux二进制文件限制为有限的RAM数量?全部内容,希望文章能够帮你解决我如何将Linux二进制文件限制为有限的RAM数量?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1033995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存