쉘 스크립트에 메모리 제한을 적용하는 방법은 무엇입니까?


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

답변:


12

다음을 수행하여 Bash 스크립트로 메모리 사용량을 제한 할 수 있습니다.

메모리 사용량을 kb (이 예에서는 2GB)로 제한하십시오.

ulimit -m 2048000

가상 메모리 사용 제한 :

ulimit -v 2048000

가상 메모리 제한을 하드 제한으로 설정하면이 제한을 초과 할 때 프로세스가 종료됩니다.

ulimit -H -v

나는 이것이 당신이 원하는 것을 할 수 있다고 생각합니다.


1
이 제한은 하위 프로세스에도 적용됩니까? 예를 들어,이 bash 스크립트에서 erlang REPL을 생성하면 메모리 제한이 적용됩니까?
Christophe De Troyer

2
@ChristopheDeTroyer 제한은 자식 프로세스에 의해 상속되므로 자식 프로세스는이를 초과 할 수 없습니다. 그러나이 제한이 모든 프로세스 트리에 적용되는 것은 아닙니다.
cartoonist
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.