Tôi đang cố gắng tăng bộ nhớ cho phép đối với một số tập lệnh PHP nhất định. Không có vấn đề gì tôi làm, ví dụ này:PHP không thể sử dụng 300MB RAM
ini_set('memory_limit', '512M');
... kịch bản luôn chạy ra khỏi bộ nhớ vào khoảng 300MB:
Fatal error: Out of memory (allocated 25165824) (tried to allocate 343810589 bytes) in \\Foo\phpQuery\phpQuery.php on line 255
tôi đã xác minh bởi nhiều có nghĩa là memory_limit
là thực sự thay đổi . Vấn đề có vẻ là PHP không thể phân bổ tổng cộng 300 MB bộ nhớ (25165824 byte + 343810589 bytes = 352 MB).
Tôi đã thử cả hai PHP/5.3.0 và PHP/5.3.9 trong hai máy tính dựa trên Windows khác nhau với các thông số kỹ thuật sau:
- Windows XP/Windows Server 2003 (cả hai máy tính là 32 hộp bit với 1GB hoặc RAM)
- chính thức PHP 32-bit VC9 binaries
- Chạy như Apache 2.2 mô-đun (bên thứ ba 32-bit VC9 nhị phân)
tôi hiểu rằng việc sử dụng một nửa của bộ nhớ RAM vật lý sẽ buộc swa pping và làm chậm những thứ xuống địa ngục nhưng tôi chỉ cần chắc chắn rằng kịch bản thực sự hoạt động để nó có thể được triển khai đến máy chủ trực tiếp. Tôi cũng đã cố gắng giá trị lớn hơn (mà procuded cùng một lỗi) và các giá trị nhỏ hơn (với một trong hai làm cho kịch bản của tôi đạt đến giới hạn hoặc làm cho Apache sụp đổ).
Điều gì có thể là nguồn gốc của giới hạn bộ nhớ được mã hóa rõ ràng này?
Cập nhật # 1: Tôi đã thử nghiệm thêm với hộp Windows Server 2003 (thực tế là máy ảo VMWare). Tôi đã tăng RAM "vật lý" lên 2 GB và tôi đã xác minh rằng tệp hoán trang được phép tăng lên tới 1152 MB. Trình quản lý tác vụ cho biết tải giao dịch hiện tại là 886 MB và có 1,5 GB bộ nhớ vật lý miễn phí. Tuy nhiên, tôi nhận được cùng một lỗi với chính xác cùng một số liệu.
Cập nhật # 2: Như tôi đã nói, chỉ thị memory_limit
là tốt. Nó hiển thị trong cả hai số ini_get()
và phpinfo()
. Thông báo lỗi bạn nhận được hơi khác so với thông báo lỗi của tôi; của tôi cho biết lỗi PHP. Hãy so sánh:
Out of memory (allocated 25165824) (tried to allocate 343810589 bytes)
Allowed memory size of 25165824 bytes exhausted (tried to allocate 343810589 bytes)
Tôi sẽ cố gắng soạn kịch bản để tạo lại vấn đề và báo cáo lại.
Nếu PHP đang cố gắng lấy nhiều bộ nhớ trong một lần, thì tôi giả sử bạn đang cố gắng tải một tệp .... thử tải tệp theo khối hơn là trong một lần –
«Nếu bạn không thể tối ưu hóa , mua thêm RAM ... »Vâng, một thời gian nó sai ...; Bạn có chắc bạn cần tất cả bộ nhớ đó không? 300MB là một số tiền khổng lồ rồi. Có lẽ bạn có thể tối ưu hóa tập lệnh của mình một chút ... – Macmade
Bạn có chắc chắn 100% hệ điều hành có bộ nhớ miễn phí hơn 300MB để phân bổ không? – DaveRandom