2013-04-23 48 views
33

Tôi đã phát điên với điều này.Kích thước bộ nhớ cho phép của 262144 byte cạn kiệt (cố gắng phân bổ 24576 byte)

Tôi nhận được thông báo tiếp theo:

Allowed memory size of 262144 bytes exhausted (tried to allocate 24576 bytes) 

DANH TODO

Kiểm tra phpinfo(), có con đường php.ini phải và chỉnh sửa nó. Thay đổi memory_limit để

memory_limit = 128M 

Hãy chắc chắn rằng memory_limit giá trị thay đổi con phpinfo() với kết quả:

memory_limit 128MB 128MB 

Kiểm tra .htaccess và thêm vào (không cần thiết)

php_value memory_limit 128M 

Và cũng để thay đổi nó qua php như vậy (trước dòng lỗi):

ini_set('memory_limit','128M'); 

Nó nói ở khắp mọi nơi rằng bộ nhớ được đặt là 128M, nhưng vẫn nhận được lỗi đó?

Lỗi nằm trong thư viện Swift (thư viện để gửi email), trong abstractSmtpTransport.php, vì vậy nó không phải là mã int của tôi được yêu cầu làm việc.

Bất kỳ ý tưởng nào ???

Chỉnh sửa: Có, trước đó đã được thực hiện khởi động lại apache.

EDIT 2: @patrick, nói thêm rằng nhưng không được lặp lại

Tryed với giá trị thấp hơn, 28m int mỗi tập tin, khởi động lại apache, cùng lỗi (phpinfo cho thấy giá trị mới)

thử với -1 , khởi động lại và lỗi tương tự.

EDIT 3: không phải là nó lạ mà cho phép bộ nhớ lớn hơn bộ nhớ phân bổ? (mặc dù thực tế là kích thước bộ nhớ cho phép là cách dưới đây cho phép bộ nhớ asigned)

+6

chỉ để kiểm tra lại - bạn đã khởi động lại apache sau khi thay đổi, phải không? – raidenace

+0

nếu bạn thử giá trị thấp hơn, hãy nói 1M? – eis

+1

Một số đệ quy giết người? –

Trả lời

104

Tôi thấy vấn đề của tôi là một chút khác biệt so với bạn, nhưng tôi sẽ gửi câu trả lời này trong trường hợp nó sẽ giúp người khác. Tôi đã sử dụng MB làm viết tắt thay vì M khi xác định memory_limit của tôi và php đã bỏ qua âm thầm. Tôi đã thay đổi nó thành một số nguyên (tính bằng byte) và vấn đề đã được giải quyết.

php.ini của tôi đã thay đổi như sau: memory_limit = 512MB đến memory_limit = 536870912. Điều này đã khắc phục được sự cố của tôi. Hy vọng nó sẽ giúp với người khác! Bạn có thể đọc trên shorthand php here.

Chúc may mắn!

Sửa

Như Yaodong chỉ ra, bạn có thể cũng giống như dễ dàng sử dụng viết tắt đúng, "M", thay vì sử dụng các giá trị byte. Tôi đã thay đổi giá trị byte của tôi thành các mục đích gỡ lỗi và sau đó không thay đổi nó trở lại.

+6

+1. Tôi không thể làm +10. Làm thế nào nhiều người phải này đã bị bắt trong những năm qua? PHP cần phải thân thiện hơn một chút với người dùng –

+20

sử dụng 'M', không phải' MB' – yaodong

+0

+1 để sử dụng M thay vì MB hoặc byte. Dễ đọc hơn nhiều và bạn không phải sử dụng bất kỳ bộ chuyển đổi nào chỉ để thay đổi giới hạn. –

1

Xem câu trả lời này có thể giúp bạn. Đặc biệt là CLI ini có thể khác với khi kịch bản đang chạy qua trình duyệt.

Allowed memory size of X bytes exhausted

+0

Không, không có bất kỳ mã nào trong bộ mã của tôi, chỉ có cái tôi đang sử dụng để cố gắng nâng lên, mà không thành công – monxas

6

Giá trị của 262.144 byte là chìa khóa để chẩn đoán. Bạn sẽ thấy số ma thuật này xuất hiện trong các câu hỏi PHP khắp nơi. Tại sao? Bởi vì đó là giá trị PHP sẽ kết thúc với giới hạn bộ nhớ của nó nếu bạn cố cập nhật giới hạn với một giá trị mà nó không thể sử dụng. Một chuỗi rỗng sẽ tạo ra giới hạn bộ nhớ này, như một ký hiệu đơn vị không chính xác như '128MB' thay vì đúng '128M'.

262,144 byte chính xác là 256 Kibibyte. Tại sao PHP chạy về nhà với giá trị đó khi nó bị nhầm lẫn là ngoài tôi.

không lạ gì khi cho phép bộ nhớ lớn hơn bộ nhớ được cấp phát?

Số tiền được phân bổ được hiển thị chỉ là lần thử phân bổ gần đây nhất, số tiền đã vượt quá giới hạn bộ nhớ. Xem Allowed memory size in PHP when allocating less.

0

nếu bạn đang sử dụng mô hình trong ứng dụng của bạn và sử dụng get_object_vars ($ mô hình) và đẩy này để mảng của bạn, thêm chức năng này để mô hình:

public function get_objects(){ 
     return (get_object_vars($this)); 
    } 

và thêm như thế này để mảng của bạn:

array_push($array,$model->get_objects()); 
0

Tôi đã cố gắng tăng giới hạn tập Wordpress lên các nội dung tải lên đa phương tiện. Tôi đã làm theo lời khuyên từ một số blog tôi sẽ không đề cập đến để tăng giới hạn từ 64MB lên 2GB.

tôi đã làm như sau:

Tạo một (php.ini) tập tin trong WP ADMIN với số nguyên sau:

upload_max_filesize = 2000MB 
post_max_size = 2100MV 
memory_limit = 2300MB 

tôi ngay lập tức nhận được lỗi này khi cố gắng đăng nhập vào bảng điều khiển Wordpress của tôi để kiểm tra xem nó làm việc:

“Được phép kích thước bộ nhớ của 262.144 byte kiệt sức (cố gắng phân bổ 24.576 bytes)"

thông tin trên trong chuỗi này đã giúp tôi rất nhiều. (Stack thường không BTW)

tôi sửa đổi các tập tin php.ini như sau:

upload_max_filesize = 2000M 
post_max_size = 2100M 
memory_limit = 536870912M 

Sự khác biệt chính là chỉ sử dụng M, không phải MB, và thiết lập rằng giới hạn bộ nhớ cao.

Ngay sau khi tôi lưu tệp PHP.ini đã thay đổi, tôi đã lưu nó, đã đăng nhập lại và màn hình đăng nhập lại xuất hiện.

tôi đi vào và kiểm tra phương tiện truyền thông cập nhật, ands đập:

Image showing twordpress media folder “Add New” box, with limits stated as “MAXIMUM UPLOAD FILE SIZE: 2 GB”

tôi đã không khởi động lại Apache chưa ... nhưng tất cả có vẻ tốt.

Cảm ơn mọi người.

+0

Tôi thường thấy mọi người đặt giới hạn bộ nhớ rất cao, mà không biết hiệu ứng gõ trên máy chủ của bạn. Nếu bạn có 16 hợp đồng biểu diễn ram, với giới hạn bộ nhớ 2 Gig, bạn cho phép 8 quy trình (theo lý thuyết) để tối đa việc sử dụng bộ nhớ của bạn nếu bạn nên chạy vào rò rỉ bộ nhớ, ví dụ. Lỗi của bạn cho biết rằng giới hạn 256 KB của bạn đã cạn kiệt ~ 24KB, vì vậy, hãy đặt memory_limit thành 2 Gig là WAY quá cao. Giới hạn 384K sẽ hoạt động ở đây, hoặc thậm chí giá trị CAO 4 Meg sẽ hoạt động trong trường hợp của bạn. Điều đó khiến bạn có 4000 tiến trình Apache để phù hợp với 16 GB RAM của bạn, thay vì 8. – TBlaar

Các vấn đề liên quan