Làm thế nào để áp đặt giới hạn bộ nhớ cho tập lệnh shell?


10

Tôi có một đoạn mã PHP, trong khi một thư mục chứa các tệp XML, sẽ xử lý chúng trên cơ sở dữ liệu.

Hiện tại, máy chủ đang chạy phiên bản PHP 5.3.10 và có một báo cáo lỗi về các vấn đề bộ nhớ được kích hoạt ZEND_MM_HEAPtrong vòng lặp.

Điều này khiến PHP không giải phóng bộ nhớ đúng cách, do đó dẫn đến lỗi và sự cố về tập lệnh:

 zend_mm_heap is corrupted

Một số giải pháp được tìm thấy, nhưng tôi không có quyền truy cập vào cài đặt máy chủ.

Để giải quyết vấn đề này, tôi đã chuẩn bị tập lệnh bash sau để xử lý vòng lặp, để tập lệnh PHP chỉ chịu trách nhiệm bằng cách xử lý tệp 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

Mục tiêu của tôi bây giờ là giới hạn phân bổ bộ nhớ bash này (bộ nhớ và bộ nhớ ảo), do đó ngăn nó treo hệ thống nếu có sự cố.

Câu hỏi của tôi là:
Làm thế nào tôi có thể giới hạn bộ nhớ được sử dụng bởi tập lệnh shell này ở một mức cụ thể?


1
Xin lưu ý rằng bạn có thể sử dụng thay đổi cách phân bổ bộ nhớ bằng cách chạy export USE_ZEND_ALLOC=0.
Pedro Cordeiro

Câu trả lời:


12

Bạn có thể giới hạn mức sử dụng bộ nhớ của Bash Script, thực hiện theo.

Giới hạn việc sử dụng bộ nhớ bằng kb (trong ví dụ này là 2GB):

ulimit -m 2048000

Hạn chế sử dụng bộ nhớ ảo:

ulimit -v 2048000

Đặt giới hạn bộ nhớ ảo thành giới hạn cứng, để quá trình đó sẽ bị hủy khi vượt quá giới hạn này:

ulimit -H -v

Tôi nghĩ rằng điều này có thể làm những gì bạn muốn.


1
Có giới hạn này tính cho các quá trình con là tốt? Ví dụ: nếu tôi sinh ra một REPL erlang trong tập lệnh bash này, liệu giới hạn bộ nhớ có được áp đặt không?
Barshe De Troyer

2
@ChristopheDeTroyer Giới hạn sẽ được kế thừa bởi các tiến trình con, vì vậy các tiến trình con không thể vượt quá. Nhưng giới hạn này sẽ không được áp dụng cho tất cả cây quy trình.
vẽ tranh biếm họa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.