2011-07-02 38 views
9

Khi tôi đăng nhập vào ứng dụng web của tôi nó cho thấy một lỗi như:Fatal error: Được phép kích thước bộ nhớ của 134217728 bytes kiệt sức (cố gắng phân bổ 87 byte)

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 87 bytes) in /gt/2.ps.fo/home/hft/domains/console.fo.spalgo.com/public_html/cake/libs/model/datasources/dbo/dbo_mysql.php on line 775

Có giải pháp nào để giải quyết vấn đề này? Tại sao tôi nhận được lỗi này?

+0

Điều đó có nghĩa là mã của bạn đang làm điều gì đó sử dụng hết bộ nhớ khả dụng. Sửa chữa nó để nó sử dụng ít bộ nhớ và/hoặc ít hơn. – deceze

Trả lời

9

Đó là âm thanh như bạn đã phân bổ more memory than PHP will allow. Chỉnh sửa cài đặt memory_limit trong trang web của bạn php.ini cấu hình như được mô tả trên trang được liên kết.

Một khả năng khác (ít có khả năng) là bạn đã đạt đến giới hạn tài nguyên setrlimit(2) cho người dùng hoặc nhóm của bạn. Kiểm tra /etc/security/limits.conf để biết các giới hạn có thể được đặt cho máy chủ web của bạn, cùng với bất kỳ tập lệnh khởi tạo nào bắt đầu môi trường máy chủ và môi trường thông dịch PHP của bạn.

+0

Mặc dù cả hai câu lệnh đều có thể xảy ra, nhưng nó có nhiều khả năng liên quan đến giới hạn bộ nhớ, tuy nhiên, chỉ tăng nó, nó sẽ giải quyết nó, nó có thể không phải là giải pháp phù hợp. . Để bổ sung cho câu trả lời của bạn, tôi đã thêm một câu trả lời khác. – AlphaZygma

+0

@AlphaZygma, cảm ơn. – sarnold

3

Ví dụ đầu tiên tôi thấy bằng cách tìm kiếm SO cho "PHP ra khỏi bộ nhớ" là this one

1

Hãy thử sử dụng echo thay vì lưu trữ những gì bạn đang in sang biến trước.

1
ini_set('memory_limit', '-1'); 
+0

Bởi -1, nó sẽ bỏ bộ nhớ và có thể bị rò rỉ.Bạn nên tránh cấu hình này, sử dụng nó khi bạn không có sự lựa chọn. –

1

Nhìn vào tệp đã ném ngoại lệ chết người (dbo_mysql.php) Tôi cho rằng cuộc gọi của bạn đang truy lục dữ liệu từ DataBase.

Ngoài ra, nhìn vào giới hạn bộ nhớ, nó cho thấy 134217728 byte, là 128MB, vì vậy tôi nghĩ rằng bất kỳ cuộc gọi API nào đang thực hiện, đang cố gắng tìm nạp nhiều dữ liệu vượt quá giới hạn được phân bổ cho mỗi tập lệnh.
Ví dụ: nếu tập lệnh cuối cùng trong ngăn xếp API được sử dụng 20MB cho nhu cầu của nó và sau đó lốp để tìm nạp dữ liệu từ DB có giá trị 115MB, tập lệnh của bạn sẽ cố gắng phân bổ 135MB đã được giới hạn hơn 7MB do đó gây ra các Fatal Exception.

Vì vậy, tôi thấy một vài điều để kiểm tra/làm:

  1. đó bạn không lấy dữ liệu không cần thiết, hay nói cách khác, lấy những gì bạn cần.
  2. Nếu bạn thực sự cần tất cả dữ liệu đó, sau đó
    • Hoặc tăng giá trị memory_limit dưới tập tin php.ini bạn
      Côn: Nếu dữ liệu của bạn tiếp tục phát triển, bạn có thể cần phải tiếp tục cập nhật giá trị này cho là người duy nhất kịch bản và phơi bày bản thân của bạn để rò rỉ bộ nhớ hoặc hết bộ nhớ.
    • Hoặc tôi khuyên bạn nên triển khai một số loại phân trang (cho phép bạn giữ giới hạn bộ nhớ trong kiểm tra) và làm cho ứng dụng của bạn dễ mở rộng hơn.
Các vấn đề liên quan