Tôi có một tập lệnh php sử dụng Doctrine2 và Zend để tính toán một số thứ từ cơ sở dữ liệu và gửi một số email cho 30.000 người dùng.Có cách nào để biết đối tượng nào và tôi có bao nhiêu bộ nhớ trong bộ nhớ?
Tập lệnh của tôi bị rò rỉ bộ nhớ và tôi muốn biết các đối tượng nào đang tiêu thụ bộ nhớ đó, và nếu có thể là người giữ tham chiếu đến chúng (do đó không cho phép chúng được phát hành).
Im sử dụng php 5.3.x, vì vậy các tham chiếu thông thường không phải là vấn đề.
Tôi đã thử sử dụng khả năng theo dõi xdebug để nhận mem_delta mà không thành công (quá nhiều dữ liệu).
Ive đã thử thêm bộ nhớ memory_get_usage theo cách thủ công trước và sau các chức năng quan trọng. Nhưng kết luận duy nhất mà tôi nhận được là tôi mất khoảng 400k cho mỗi người dùng và 3000 lần người dùng mang lại cho tôi 1Gb mà tôi có sẵn.
Có cách nào khác để biết vị trí và lý do bộ nhớ bị rò rỉ không? Cảm ơn
Vâng, người dùng nên được xử lý cái khác, nên chỉ có 400k bộ nhớ cần thiết! Nếu mỗi chu kỳ làm tăng mức sử dụng bộ nhớ, một cái gì đó trong thiết kế của bạn là sai lầm nghiêm trọng! – markus
Vâng, tôi có một vòng lặp gọi một hàm thực hiện các thao tác sau: Nhận thông tin cho người dùng, tính toán (với lưu trữ được bao gồm), gửi thư, phát hành tài nguyên. Và mỗi người dùng độc lập với nhau, vì vậy một cách rõ ràng các tài nguyên không được phát hành –
Bạn đã xem xét trình quản lý thực thể của học thuyết chưa? Tôi không quen với học thuyết nhưng nó có thể lưu trữ các tham chiếu đến các thực thể/proxy/... cho tất cả 30k người dùng. – Fge