シェルスクリプトにメモリ制限を課す方法は?


10

フォルダーにXMLファイルが含まれている間、それらをデータベース上で処理するPHPスクリプトがあります。

現在、サーバーはPHPバージョン5.3.10を実行しており、ループ内でトリガーされたメモリの問題に関するバグレポートがありZEND_MM_HEAPます。

これにより、PHPがメモリを適切に解放しないため、エラーとスクリプトクラッシュが発生します。

 zend_mm_heap is corrupted

いくつかの解決策が見つかりましたが、サーバー設定にアクセスできません。

これに対処するために、ループを処理する次のbashスクリプトを用意しました。PHPスクリプトはXMLファイルを処理することのみに責任があります。

#!/bin/bash

# Check for files to process
# If files are present, call
# the PHP script

DIR="/path/to/dir/with/files"
while [ "$(ls -A $DIR)" ]; do
        php /path/to/php/script/myscript.php
done

私の目標は、このbashのメモリ割り当てを制限して(メモリと仮想メモリ)、問題が発生した場合にシステムがハングしないようにすることです。

私の質問は
、このシェルスクリプトが使用するメモリを特定の量に制限するにどうすればよいですか?


1
を実行することにより、メモリの割り当て方法を変更できることに注意してくださいexport USE_ZEND_ALLOC=0
Pedro Cordeiro、2015年

回答:


12

次のようにして、Bashスクリプトによってメモリ使用量を制限できます。

メモリ使用量をkbで制限します(この例では2GB):

ulimit -m 2048000

仮想メモリの使用を制限します。

ulimit -v 2048000

仮想メモリ制限をハード制限に設定して、この制限を超えるとプロセスが強制終了されるようにします。

ulimit -H -v

これはあなたが望むことをすることができると思います。


1
これは子プロセスの数も制限しますか?たとえば、このbashスクリプトでerlang REPLを生成すると、メモリ制限が課されますか?
Christophe De Troyer 2014

2
@ChristopheDeTroyer制限は子プロセスによって継承されるため、子プロセスはそれを超えることはできません。ただし、この制限はすべてのプロセスツリーに適用されるわけではありません。
漫画家、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.