Hướng dẫn php cli memory limit - giới hạn bộ nhớ php cli
Tôi đang gặp lỗi bộ nhớ trong công việc php cron: Show
Các phần áp dụng của crontab là:
Tôi đang chạy trên Debian Squeeze, được cập nhật đầy đủ. Giải pháp rõ ràng là CLI có giới hạn bộ nhớ thấp (là 64MB). Tuy nhiên, /etc/php5/cli/php.ini nói rằng điều đó là không giới hạn.
Tôi đọc ở đâu đó rằng nó có thể khác nhau đối với những người dùng khác nhau và vì quá trình này đang chạy dưới dạng www-data, tôi đã chạy:
Ngay cả Apache/php.ini cũng có giới hạn cao hơn lỗi yêu cầu:
Tôi còn thiếu gì? Giới hạn bộ nhớ này ở đâu? As PHP-CLI has a different ini file, this often leads to misconfiguration.PHP-CLI has a different ini file, this often leads to misconfiguration. What we can do, for a «unix shebang» PHP shell script, is to set ini keys on the fly directly on the shebang line, like so:PHP shell script, is to set ini keys on the fly directly on the shebang line, like so:
Then to see if php had understood, using
Correct shell output should contain:
0 1 Without using the Unix shebang mechanism, we can similarly pass one (or many) 2 arguments in the command line, or a dedicated start-up script: Lỗi này nói cho ta biết rằng, các tiến trình ứng dụng PHP đang thực thi lượng dữ liệu lớn tiêu ngốn nhiều tài nguyên RAM bộ nhớ, nhưng bị giới hạn bởi tài nguyên bộ nhớ được phép cấp cho 1 tiến trình PHP thực thi (do ta quy định trong php.ini hoặc trong code/.htaccess thông qua giá trị biến “memory_limit” được lập trình viên/quản trị viên quy định). Tiến trình yêu cầu được cấp thêm bộ nhớ để tiến trình PHP có thể hoạt động ổn định. tiêu ngốn nhiều tài nguyên RAM bộ nhớ, nhưng bị giới hạn bởi tài nguyên bộ nhớ được phép cấp cho 1 tiến trình PHP thực thi (do ta quy định trong php.ini hoặc trong code/.htaccess thông qua giá trị biến “memory_limit” được lập trình viên/quản trị viên quy định). Tiến trình yêu cầu được cấp thêm bộ nhớ để tiến trình PHP có thể hoạt động ổn định. Vì vậy khi gặp lỗi này, ta thường có 2 cách :– Nâng mức giới hạn bộ nhớ cho tiến trình PHP cao hơn. Nâng giá trị “memory_limit“.– Kiểm tra lại source code website sao PHP tiến trình lại chiếm nhiều bộ nhớ đến vậy (tất nhiên là mức bộ nhớ giới hạn cho tiến trình phải phù hợp) Nếu bạn không chắc mức giá trị cấu hình PHP memory limit đã set thì bạn có thể nhận biết dựa vào lỗi trả về từ PHP error. Sau đây là danh sách các mức cấu hình memory_limit thường sử dụng tương ứng, từ đây bạn có thể so sánh đối chiếu để nâng mức giá trị cấu hình :
1. Xác định file php.iniBạn sẽ xác định vị trí file php.ini bằng lệnh command line sau : # php -i | grep “php.ini” Loaded Configuration File => /usr/local/php56/lib/php.ini 2. Tăng giá trị memory_limitGiả sử trong ví dụ cấu hình này, giới hạn bộ nhớ là 128M, nhưng vẫn bị báo lỗi là không đủ thì ta sẽ nâng cấp thêm bộ nhớ cho tiến trình PHP trong điều kiện bộ nhớ RAM còn đủ xài. # vi /usr/local/php56/lib/php.ini memory_limit = 128M Thành memory_limit = 256M 3. Khởi động lại dịch vụ PHPNếu PHP là module Apache thì khởi động lại Apache # /etc/init.d/httpd restart Nếu PHP hoạt động như PHP-FPM. # /etc/init.d/phpfpm restart Mình thì sử dụng directadmin chạy php-fpm56 và php-fpm70 Để chắc chắn restart đúng PHP mình gõ lệnh như sau: #cd /etc/init.d/ Sau đó restart các file sau: #/etc/init.d/directadmin restart #/etc/init.d/php-fpm56 restart #/etc/init.d/php-fpm70 restart 4. Cấu hình giá trị memory_limitTrong trường hợp bạn không có quyền truy cập chính sửa file php.ini trên hệ thống, thì bạn có thể quy định mức giới hạn bộ nhớ bằng file .htaccess với nội dung như sau:.htaccess với nội dung như sau: #vi ./.htaccess php_value memory_limit 256M |