この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
PHPの動作でメモリの容量が不足しているエラーが出ることがあります。PHPにはデフォルトでメモリ上限が設定されているため、プログラムの処理に対するメモリ容量が小さい場合に起こるみたいです。
今回の記事では、Ansibleを利用してphp.iniファイルを修正し、メモリ上限を512Mに変更する方法を紹介します。
☆☆☆☆☆☆☆☆☆↓Ansibleが気になる方はこちらをチェック↓☆☆☆☆☆☆☆☆☆☆
https://cloud5.jp/saitou-ansible-summary/
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
PHPの割り当てメモリを変更
■PHPのメモリ確認
まずは、PHPに設定されているデフォルトのメモリ上限を確認しておきましょう。
php -i | grep memory_limit
デフォルトのメモリ上限は"128M"ですね。WordPressを利用しているときは特に設定を変えなくても問題なかったと思うのですが、今後のために変更方法を覚えておきます。
■前提
サーバで直接PHPのメモリ上限を変更してもいいのですが、せっかくならAnsibleを利用してメモリ上限を上げてみます。
前提は以下の通りです。
- AWS上で構築
- Ansibleがインストール済みのコントロールノード×1台
- コントロールノードと通信可能な管理ノード×1台
■Ansible Playbook作成
コントロールノードで以下のファイルを修正・作成します。
●ansible/hostsファイル修正
まずはansible/hostsファイルを修正していきます。
sudo vi /etc/ansible/hosts
"#ex1"行の下に以下の文章を挿入し、保存します。
# My Hosts
[devservers]
<管理ノードのIPアドレス>
↓
●Playbookファイル作成
続いてPlaybookファイルを作成します。ユーザー配下に作成していきましょう。
sudo vi setup_server.yaml
以下の記述を貼り付けて、保存します。
- name: Setup server
hosts:
- devservers
become: True
roles:
- web_server_role
●ロールファイル
最後にロールファイルを作成します。ロールファイルを作成する場所は、"roles/web_server_role/tasks"配下です。
sudo mkdir -p roles/web_server_role/tasks
sudo vi roles/web_server_role/tasks/main.yaml
以下の記述を貼り付けて、保存します。
- name: Install php packages
command: amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2
- name: Install the latest version of httpd and MariaDB package
command: yum install -y httpd mariadb-server
- name: Start httpd service
service:
name: httpd
state: started
- name: Enable httpd service
service:
name: httpd
enabled: yes
- name: Get httpd Installed version
command: httpd -v
- name: Get status of httpd service
command: systemctl status httpd
- name: Update memory_limit in php.ini
lineinfile:
path: /etc/php.ini
regexp: '^memory_limit ='
line: 'memory_limit = 512M'
backup: yes
register: result
changed_when: result.changed
- name: Show output if memory_limit is changed
debug:
msg: "memory_limit in php.ini has been updated to 512M"
when: result.changed
- name: Restart service php-fpm
service:
name: php-fpm
state: restarted
- name: Create file
file:
path: /var/www/html/phpinfo.php
state: touch
- name: Write content to the file
blockinfile:
path: /var/www/html/phpinfo.php
block: |
<?php
// phpinfo.php
phpinfo();
?>
marker: "# {mark} ANSIBLE MANAGED BLOCK"
ファイルの修正・作成は以上です。
■動作確認
それではAnsibleを実行していきましょう。
ansible-playbook setup_server.yaml -v
[ec2-user@ip-10-0-1-107 ~]$ ansible-playbook setup_server.yaml -v
Using /etc/ansible/ansible.cfg as config file
PLAY [Setup server] ****************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************
[WARNING]: Platform linux on host ansible-target is using the discovered Python interpreter at /usr/bin/python, but
future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.
ok: [ansible-target]
~途中省略~
TASK [web_server_role : Update memory_limit in php.ini] ****************************************************************
changed: [ansible-target] => {"backup": "/etc/php.ini.4382.2023-07-22@07:57:29~", "changed": true, "msg": "line replaced"}
TASK [web_server_role : Show output if memory_limit is changed] ********************************************************
ok: [ansible-target] => {
"msg": "memory_limit in php.ini has been updated to 512M"
~途中省略~
TASK [web_server_role : Create file] ***********************************************************************************
changed: [ansible-target] => {"changed": true, "dest": "/var/www/html/phpinfo.php", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "size": 0, "state": "file", "uid": 0}
TASK [web_server_role : Write content to the file] *********************************************************************
changed: [ansible-target] => {"changed": true, "msg": "Block inserted"}
PLAY RECAP *************************************************************************************************************
ansible-target : ok=12 changed=10 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
failedはなく、okと表示されていますね。成功したようです。
↓実行結果の中身を見ると、メモリの上限もしっかり変更されています。
TASK [web_server_role : Show output if memory_limit is changed] ********************************************************
ok: [ansible-target] => {
"msg": "memory_limit in php.ini has been updated to 512M"
念のためphpinfo関数を利用して、設定内容を見ておきます。
↓以下にアクセスして、"memory_limit"項目を確認してください。
http://<パブリックIPアドレス>/phpinfo.php
今回の構築は以上です。
■余談
php.iniファイルを修正して、httpdを再起動しても修正した値が反映されませんでした。反映させるためには、php-fpmを再起動する必要があるようです。
まとめ:Ansibleを利用して、PHPのメモリ上限を変更してみた
Ansibleは構成管理に長けたツールですので、ソフトウェアのインストールはもちろん、設定ファイルの修正も可能です。ターゲットのサーバに入らずに作業でき、複数台に一気に修正を行えるのでぜひ試してみてください。
☆☆☆☆☆☆☆☆☆↓Ansibleが気になる方はこちらをチェック↓☆☆☆☆☆☆☆☆☆☆
https://cloud5.jp/saitou-ansible-summary/
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
参考リンク:RedHat公式webサイト
↓ほかの協栄情報メンバーも自動化に関する記事を公開しています。ぜひ参考にしてみてください。
■Terraformの概要と使用方法(higa)
https://cloud5.jp/terraform_summary/
■AWS CodePipeline を利用してS3の静的ウェブサイトの更新を自動化する(tatsuoka)
https://cloud5.jp/tatsuoka-handson-beginner-codepipeline/
■AWS上にopenstackを構築(liuwanying)
https://cloud5.jp/openstack-install/
■Ansibleを利用してwindowsOSのインスタンスを操作する方法(umemoto)
https://cloud5.jp/control-windows-fromansible/