PHP+Nginxで「Allowed memory size of 134217728 bytes exhausted」エラー

PHP

Allowed memory size of 134217728 bytes exhausted Error

PHP(Laravel含む)で大きさなサイズのデータを扱うと「Allowed memory size of 134217728 bytes exhausted」エラーが発生することがあります。

DBから大量のデータを取得して変数に代入したり、配列に多くのデータをぶち込んだり、画像や動画などの大きめのバイナリデータを扱ったり。発生要因は様々ですが、メモリの使い過ぎです。

「134217728 bytes」は「134,217,728」=134MBですが、php.iniの「memory_limit」で指定されている「128MB」を超えているよ、というメッセージになります。

これを回避するために「php.ini」を編集します。

php.iniの場所を調べる

サーバーにsshなどで接続し、サーバーコンソールで「php –ini」を実行するとphp.iniの場所(3行目)がわかります。

php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/10-opcache.ini,
/etc/php.d/20-bz2.ini,
/etc/php.d/20-calendar.ini,
/etc/php.d/20-ctype.ini,

php.iniを編集する

「memory_limit」のデフォルトは128MBになっていたので、256MBに変更します。このメモリサイズは作成しているプログラムが必要と思われるサイズを指定してください。

; Maximum amount of memory a script may consume
; https://php.net/memory-limit
; memory_limit = 128M
memory_limit = 256M

設定の反映

nginxを使用している場合、PHP-FPMで(FastCGI)で稼働させていると思いますので、先ほどphp.iniに設定した内容を反映させるためにPHP-FPMを再起動します。

systemctl restart php-fpm

札幌在住エンジニア。JavaやPHPやWordPressを中心とした記事が中心です。

【SE歴】四半世紀以上
【Backend】php / java(spring) / c# / AdobeFlex / c++ / VB / cobol
【Frontend】 vue.js / jquery他 / javascript / html / css
【DB】oracle / mysql / mariadb / sqlite
【infrastructure】aws / oracle / gcp
【license】aws(saa-c03) / oracle master / XML Master / Sun Certified Programmer for the Java 2 Platform 1.4

Nobelをフォローする
PHP
Nobelをフォローする

コメント

タイトルとURLをコピーしました