2013-07-10 30 views
13

Ai đó có thể làm rõ sự khác biệt chính xác của thông số $real_usage cho memory_get_usage()?PHP memory_get_usage (false) vs memory_get_usage (true)

Các manual trạng thái:

Set this to TRUE to get the real size of memory allocated from system. If not set or FALSE only the memory used by emalloc() is reported.

Nhưng sự khác biệt là gì? Giá trị nào có thể so sánh với cài đặt IN2 memory_limit INI?

Đối với một số tập lệnh chạy dài, tôi nhận được một cái gì đó như sử dụng thực tế 250MB và chỉ sử dụng 50MB emalloc. Làm thế nào là có thể?

Tôi đang cố gắng phân tích một số vấn đề rò rỉ bộ nhớ và memory_get_usage() là một chỉ báo quan trọng đối với tôi mà tôi cần phải hiểu đầy đủ. Cảm ơn.

+0

Bạn có thể đã trải qua điều này vẫn chia sẻ liên kết. [bộ nhớ mangement] (http://docstore.mik.ua/orelly/webprog/php/ch14_05.htm) và [Cơ bản về bộ nhớ PHP] (http://php.net/manual/en/internals2.memory. management.php # internals2.memory.management.apis) .. Vui lòng đọc câu cuối cùng của đoạn 2 từ liên kết thứ hai – Yogesh

+0

Liên kết được thêm vào. Bạn có nghĩa là * "Khi PHP được xây dựng trong chế độ gỡ lỗi (--enable-debug), phát hiện rò rỉ được báo cáo, trong một thế giới hoàn hảo họ sẽ không bao giờ được triển khai." *? Làm thế nào để trả lời câu hỏi của tôi? –

+0

Tôi nghĩ rằng tôi đã hiểu sai nó "xây dựng trong" là "trong". Tôi xin lỗi vì điều đó. Tôi đọc nó như chúng ta có thể thiết lập chế độ gỡ lỗi ON để xem rò rỉ bộ nhớ – Yogesh

Trả lời

8

Bộ nhớ thực là lượng bộ nhớ dành riêng cho quy trình PHP. PHP dự trữ bộ nhớ trong các khối lớn, và điều này sẽ là < = memory_limit, và có thể tăng lên trong khi thực thi tập lệnh. Ví dụ. Nếu nó lấp đầy một đoạn, và sau đó bạn cố gắng gán cho một biến mới, nó sẽ dự trữ một đoạn khác.

Nếu bạn đặt tham số thành FALSE, nó chỉ báo cáo số lượng bộ nhớ mà PHP thực sự đang sử dụng bên trong bộ nhớ dành riêng. Điều này sẽ tăng lên mỗi khi bạn gán cho một biến mới, hoặc gọi một hàm vv.

Nếu bạn quan tâm đến lượng bộ nhớ thực sự đang được sử dụng, thì bạn sẽ muốn bộ nhớ thực.

Nếu bạn đang gỡ lỗi hoặc cố gắng điều chỉnh một đoạn mã, có thể bạn sẽ quan tâm hơn đến bộ nhớ emalloc(). Điều này sẽ cho phép bạn kiểm tra bộ nhớ trước và sau một cuộc gọi hàm hoặc phép gán và tính toán delta.

+0

Và thiết lập tham số nào tôi cần phải phát hiện nếu tôi sắp đạt được thiết lập INI 'memory_limit'? * (cho bộ nhớ đệm nội bộ Tôi cần nhiều bộ nhớ và tôi cần giải phóng bộ nhớ cache khi cần thiết để tránh vượt quá giới hạn bộ nhớ) * –

+0

Điều đó tùy thuộc vào mức độ gần bạn muốn cho phép vào bộ nhớ memory_limit. Tôi có thể đề nghị để thiết lập các tham số để FALSE để có được việc sử dụng emalloc(). –

+0

Dựa trên thử nghiệm của tôi (trong PHP 5.5), thiết lập INI 'memory_limit' được dựa trên giá trị của' memory_get_usage (true) '. Vì vậy, kịch bản của bạn thực sự có thể sử dụng nhiều KBs nhỏ hơn mức tối đa trước khi nó bị treo. '' ' william

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