web-dev-qa-db-ja.com

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

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

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

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

 zend_mm_heap is corrupted

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

これに対処するために、ループを処理する次の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メモリの割り当てを制限して(メモリと仮想メモリ)、問題が発生した場合にシステムがハングするのを防ぐことです。

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

10
Zuul

以下を実行して、Bashスクリプトによってメモリ使用量を制限できます。

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

ulimit -m 2048000

仮想メモリの使用を制限する:

ulimit -v 2048000

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

ulimit -H -v

これであなたがやりたいことができると思います。