2009-12-30 21 views
6

vì một số lý do, một trong các tập lệnh php của tôi bỏ qua giới hạn bộ nhớ php.ini hoặc ini_set.Kịch bản lệnh CLI Php bỏ qua memory_limit, bị lỗi ở số thấp hơn nhiều so với giới hạn

Khi tôi thực hiện print_r (ini_get_all), nó hiển thị giới hạn bộ nhớ toàn cục được đặt thành 100M (và cục bộ cho vấn đề đó), khi tập lệnh của tôi chết tại Lỗi nghiêm trọng: Hết bộ nhớ (phân bổ 24714304) (cố gắng phân bổ 571 byte))

Bất kỳ mẹo nào về chẩn đoán điều này? Máy chủ có 8gigs bộ nhớ và không bao giờ gặp sự cố khi chạy tập lệnh này trước đây.

Mọi mẹo gỡ lỗi này?

Cảm ơn!

Trả lời

5

Nguyên nhân phổ biến nhất của việc này là thường là nhị phân PHP CLI đang sử dụng tệp php.ini khác với bạn mong đợi. Điều này có thể được gây ra bởi user permissions hoặc đơn giản là các tệp php.ini mặc định khác nhau cho các phiên bản đã cài đặt của PHP. Tuy nhiên, có vẻ như bạn đã lược tả nó một chút và giới hạn bộ nhớ của bạn có thể đúng trong kịch bản của bạn.

Trong trường hợp đó, hoàn toàn có thể có giới hạn bộ nhớ cứng trên các quy trình do hệ điều hành của bạn áp đặt, trong trường hợp đó bạn sẽ phải tìm ra nơi áp đặt đến.

Tôi khuyên bạn nên xem this thread vì áp phích đó đã trải qua một điều gì đó rất giống với tình huống của bạn.

+0

bạn có thể đúng, có thể có một giới hạn khó có hiệu lực. tôi không có đầu mối làm thế nào để tìm thấy điều đó. có lẽ tôi sẽ hỏi về lỗi máy chủ! – james

+0

bạn là một người thông minh tôi đã thực hiện một số nghiên cứu về giới hạn bộ nhớ bash kiểm tra ulimit -v, điều này đã hạn chế rất nhiều bộ nhớ của tôi !!! – james

+0

Rất vui, bạn đã tìm thấy nó. – zombat

0

ngắn và ngọt ngào

ini_set('memory_limit', -1); 

trong trường hợp bạn muốn bỏ qua gỡ lỗi

+0

Tôi nghĩ anh ấy đã qua thời điểm đó rồi. Cài đặt INI của anh ấy đã có trên 100 triệu. –

+0

tôi cũng đã làm điều đó nhưng nó không hoạt động. Trong thực tế nếu tôi in ra phpinfo của tôi() nó sẽ hiển thị một giới hạn bộ nhớ cao hơn nhiều, và khi tôi in ra ini_get_all() bất kỳ thay đổi giới hạn bộ nhớ được hiển thị. – james

5

Bộ nhớ ảo cho các quá trình của tôi đã được cứng giới hạn (quá một số thấp hơn nhiều).

Từ một vỏ bash tôi đã làm điều này:

ulimit -v (memory_in_bytes, không có dấu ngoặc đơn)

này cố định vấn đề của tôi. Thiên Chúa tôi yêu stackoverflow