Tôi đã gặp phải thông báo lỗi đáng sợ, có thể là do nỗ lực chăm chỉ, PHP đã hết bộ nhớ:
Kích thước bộ nhớ được phép là #### byte đã cạn kiệt (đã cố gắng cấp phát #### byte) trong file.php trên dòng 123
Tăng giới hạn
Nếu bạn biết mình đang làm gì và muốn tăng giới hạn, hãy xem memory_limit :
ini_set('memory_limit', '16M');
ini_set('memory_limit', -1); // no limit
Hãy coi chừng! Bạn có thể chỉ giải quyết được triệu chứng chứ không phải vấn đề!
Chẩn đoán rò rỉ:
Thông báo lỗi trỏ đến một dòng có một vòng lặp mà tôi tin rằng đang bị rò rỉ, hoặc tích lũy không cần thiết, bộ nhớ. Tôi đã in các memory_get_usage()
câu lệnh ở cuối mỗi lần lặp và có thể thấy số lượng tăng dần cho đến khi đạt đến giới hạn:
foreach ($users as $user) {
$task = new Task;
$task->run($user);
unset($task); // Free the variable in an attempt to recover memory
print memory_get_usage(true); // increases over time
}
Với mục đích của câu hỏi này, hãy giả sử mã spaghetti tồi tệ nhất có thể tưởng tượng được đang ẩn trong phạm vi toàn cầu ở đâu đó trong $user
hoặc Task
.
Những công cụ, thủ thuật PHP hoặc voodoo gỡ lỗi nào có thể giúp tôi tìm và khắc phục sự cố?