tag:crieit.net,2005:https://crieit.net/tags/php-fpm/feed 「php-fpm」の記事 - Crieit Crieitでタグ「php-fpm」に投稿された最近の記事 2021-11-24T23:44:18+09:00 https://crieit.net/tags/php-fpm/feed tag:crieit.net,2005:PublicArticle/17781 2021-11-24T23:44:18+09:00 2021-11-24T23:44:18+09:00 https://crieit.net/posts/php-fpm-php-value-error-20211124 PHP-FPM 環境で .htaccess に php_value を使用したら 500 Internal Server Error <p>表題の通り、 PHP-FPM 環境で <code>.htaccess</code> に <code>php_value</code> を使用したら 500 Internal Server Error. が発生したので対処をメモしておきます。</p> <h2 id="現象"><a href="#%E7%8F%BE%E8%B1%A1">現象</a></h2> <pre><code class="htaccess">php_value memory_limit 64M php_value post_max_size 32M php_value upload_max_filesize 16M </code></pre> <p><code>.htaccess</code> にこのようなファイルアップロード関係の設定を記述しておくと、 500 Internal Server Error. が発生しました。</p> <p>なお、サーバログには次のように記録されていました。</p> <pre><code>/PATH/TO/WEBDIRECTORY/.htaccess: Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration, referer: https://example.com/ </code></pre> <h2 id="調査・対処"><a href="#%E8%AA%BF%E6%9F%BB%E3%83%BB%E5%AF%BE%E5%87%A6">調査・対処</a></h2> <p>このサーバログで検索すると次の記事がヒット。</p> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://mattintosh.hatenablog.com/entry/20200605/1591359561">PHP-FPM 環境で .htaccess に php_value は書ける? - mattintosh note</a></li> </ul> <p>PHP-FPM 環境では <code>php_value</code> は使用できないとのこと。</p> <p>今回はこのケースに該当していたため、対処します。</p> <h3 id=".htaccess"><a href="#.htaccess">.htaccess</a></h3> <pre><code class="htaccess"># php_value memory_limit 64M # php_value post_max_size 32M # php_value upload_max_filesize 16M <Files ".user.ini"> Require all denied </Files> </code></pre> <p>まず <code>.htaccess</code> は <code>php_value</code> を止めて、代わりに次に記述する <code>.user.ini</code> へのWebアクセスを禁じる設定を追記します。</p> <h3 id=".user.ini"><a href="#.user.ini">.user.ini</a></h3> <p>続いて <code>.user.ini</code> に先程の <code>php_value</code> の設定と同様の内容を記述します。</p> <pre><code class="ini">memory_limit 64M post_max_size 32M upload_max_filesize 16M </code></pre> <p>これで動作確認し、問題ないことを確認しました。</p> <h2 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h2> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://mattintosh.hatenablog.com/entry/20200605/1591359561">PHP-FPM 環境で .htaccess に php_value は書ける? - mattintosh note</a></li> </ul> arm-band tag:crieit.net,2005:PublicArticle/14923 2019-04-14T15:12:18+09:00 2019-04-22T17:23:17+09:00 https://crieit.net/posts/KUSANAGI-MySQL KUSANAGI で MySQL が頻繁に落ちる際の対処 <h1 id="環境"><a href="#%E7%92%B0%E5%A2%83">環境</a></h1> <div class="table-responsive"><table> <thead> <tr> <th>名前</th> <th>バージョン</th> </tr> </thead> <tbody> <tr> <td>VPS</td> <td>さくらインターネット 4GB</td> </tr> <tr> <td>OS</td> <td>KUSANAGI 8.4.2-2 (CentOS7 ベース)</td> </tr> <tr> <td>ウェブサーバー</td> <td>nginx 1.15.10</td> </tr> <tr> <td>PHP</td> <td>PHP 7.3.4</td> </tr> <tr> <td>MySQL</td> <td>MariaDB 10.1.38</td> </tr> <tr> <td>アプリケーション</td> <td>WordPress</td> </tr> <tr> <td>その他</td> <td><a target="_blank" rel="nofollow noopener" href="https://mackerel.io/">Mackerel</a></td> </tr> </tbody> </table></div> <h1 id="問題発生"><a href="#%E5%95%8F%E9%A1%8C%E7%99%BA%E7%94%9F">問題発生</a></h1> <p><a href="https://crieit.now.sh/upload_images/5920b1ba5aa14ecdac4cb2aa0060871a5cb2cb625acd3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5920b1ba5aa14ecdac4cb2aa0060871a5cb2cb625acd3.png?mw=700" alt="データベース接続確立エラー.png" /></a></p> <p>サイトにブラウザからアクセスすると「データベース接続確立エラー」となる。</p> <h1 id="状況確認"><a href="#%E7%8A%B6%E6%B3%81%E7%A2%BA%E8%AA%8D">状況確認</a></h1> <p>コンソールにて。</p> <pre><code>sudo cat /var/log/messages </code></pre> <p>以下のログを発見。</p> <pre><code>Apr 14 00:31:06 hoge kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0 </code></pre> <p>MySQL が落ちている。</p> <h1 id="暫定対処"><a href="#%E6%9A%AB%E5%AE%9A%E5%AF%BE%E5%87%A6">暫定対処</a></h1> <p>コンソールにて。</p> <pre><code>sudo systemctl start mysqld </code></pre> <p>「データベース接続確立エラー」は解消される。</p> <h1 id="数時間後に問題再発"><a href="#%E6%95%B0%E6%99%82%E9%96%93%E5%BE%8C%E3%81%AB%E5%95%8F%E9%A1%8C%E5%86%8D%E7%99%BA">数時間後に問題再発</a></h1> <p><a href="https://crieit.now.sh/upload_images/5920b1ba5aa14ecdac4cb2aa0060871a5cb2cb625acd3.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/5920b1ba5aa14ecdac4cb2aa0060871a5cb2cb625acd3.png?mw=700" alt="データベース接続確立エラー.png" /></a></p> <p>「データベース接続確立エラー」</p> <h1 id="再度状況確認"><a href="#%E5%86%8D%E5%BA%A6%E7%8A%B6%E6%B3%81%E7%A2%BA%E8%AA%8D">再度状況確認</a></h1> <p>コンソールにて。</p> <pre><code>sudo cat /var/log/messages </code></pre> <p>同様のログを確認。</p> <pre><code>Apr 14 07:48:32 hoge kernel: mysqld invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0 </code></pre> <p><a target="_blank" rel="nofollow noopener" href="https://mackerel.io/">Mackerel</a> でのメモリ状況を確認。</p> <p><a href="https://crieit.now.sh/upload_images/6f5c7f137838dee61bb62935fd733c5e5cb2c0899c6dd.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/6f5c7f137838dee61bb62935fd733c5e5cb2c0899c6dd.png?mw=700" alt="スクリーンショット 2019-04-14 14.08.10.png" /></a></p> <p>メモリを食いつぶした後スワップまで喰って無事死亡している。</p> <h1 id="nginx ログの確認"><a href="#nginx+%E3%83%AD%E3%82%B0%E3%81%AE%E7%A2%BA%E8%AA%8D">nginx ログの確認</a></h1> <p>詳細は割愛するが、nginx のログを確認したところ、ブルートフォースアタックでの接続数増、pubsubhubbub での接続数増、行儀の悪い bot からの接続数増など様々な痕跡があった。</p> <p>なお、KUSANAGI による nginx ログは以下の場所に分散している。<br /> (筆者はしばらくの間ログ分散に気付かず、確認に時間がかかった。)</p> <h2 id="WordPress SSL"><a href="#WordPress+SSL">WordPress SSL</a></h2> <p>/home/kusanagi/kusanagi_html/log/nginx/ssl_access.log</p> <p>※ kusanagi_html はプロビジョニングディレクトリ</p> <h2 id="WordPress HTTP"><a href="#WordPress+HTTP">WordPress HTTP</a></h2> <p>/home/kusanagi/kusanagi_html/log/nginx/access.log</p> <p>※ kusanagi_html はプロビジョニングディレクトリ</p> <h2 id="WordPress 外"><a href="#WordPress+%E5%A4%96">WordPress 外</a></h2> <p>/var/log/nginx/access.log</p> <h1 id="恒久対処"><a href="#%E6%81%92%E4%B9%85%E5%AF%BE%E5%87%A6">恒久対処</a></h1> <p>コンソールにて。</p> <pre><code>sudo vim /etc/php-fpm.d/www.conf /pm.max_children = i </code></pre> <p>PHP-FPM の設定を変更する。</p> <pre><code>pm.max_children = 50 </code></pre> <p>を以下に変更。</p> <pre><code>pm.max_children = 17 </code></pre> <p>[esc] キーで編集終了。</p> <p>KUSANAGI (nginx + php-fpm) 再起動</p> <pre><code>sudo kusanagi restart </code></pre> <h1 id="対処後の確認"><a href="#%E5%AF%BE%E5%87%A6%E5%BE%8C%E3%81%AE%E7%A2%BA%E8%AA%8D">対処後の確認</a></h1> <p><a target="_blank" rel="nofollow noopener" href="https://mackerel.io/">Mackerel</a> でのメモリ状況</p> <p><a href="https://crieit.now.sh/upload_images/69106066dd8c39df5777475fb4ca26045cb2c0a52e60d.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/69106066dd8c39df5777475fb4ca26045cb2c0a52e60d.png?mw=700" alt="スクリーンショット 2019-04-14 14.06.51.png" /></a></p> <p>ピーク時のメモリ消費量が 3.5GB 程度と、上限の 4GB から 0.5GB 程度余裕のある状態で消費しきらずに、スワップアウトも発生しない。</p> <p>結果、「データベース接続確立エラー」とならず接続状況は安定している。</p> <h1 id="解説"><a href="#%E8%A7%A3%E8%AA%AC">解説</a></h1> <p>PHP-FPM の <code>pm.max_children</code> はアプリケーションの最大プロセス数。php.ini ファイルでの <code>memory_limit</code>は <code>128M</code> に設定されているため、<code>pm.max_children</code> を <code>17</code> に設定した場合 PHP-FPM のみで食いつぶすメモリ量を 2GB 程度に抑えることができる。<br /> デフォルトで 1GB 程度消費しているため、計約3GB。さらに MySQL などで 0.5GB 程度消費しているものと思われる。<br /> 詳細は <code>top</code> コマンド等で確認できる。</p> <h1 id="今後"><a href="#%E4%BB%8A%E5%BE%8C">今後</a></h1> <p>万が一落ちた場合に monit で MySQL の自動再起動、fail2ban によるブロッキング設定を行いたいが後ほど。</p> <h1 id="参考"><a href="#%E5%8F%82%E8%80%83">参考</a></h1> <ul> <li><a target="_blank" rel="nofollow noopener" href="https://qiita.com/AknEp/items/42421a4c3a4a3a8d8991">php-fpmとRAMのお勉強メモ。KUSANAGIで試した。 - Qiita</a></li> <li><a target="_blank" rel="nofollow noopener" href="https://gist.github.com/kitak/6349463">コマンドによる「負荷」の原因切り分け</a></li> </ul> sola tag:crieit.net,2005:PublicArticle/14776 2019-02-02T09:32:29+09:00 2019-02-02T09:34:19+09:00 https://crieit.net/posts/KUSANAGI-PHP7-nginx KUSANAGI で PHP7 + nginx を利用している際のタイムアウト時間設定 <h1 id="はじめに"><a href="#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB">はじめに</a></h1> <p>デフォルトでファイルが複数あって迷うので、備忘録です。<br /> 以下はタイムアウト時間が1時間(3600秒)の場合の例です。</p> <p>必要な設定箇所は 3 (4) ファイルです。</p> <h1 id="PHP7"><a href="#PHP7">PHP7</a></h1> <h2 id="php.ini"><a href="#php.ini">php.ini</a></h2> <p>/etc/php7.d/php.ini</p> <pre><code>max_execution_time = 3600 </code></pre> <h2 id="PHP-FPM"><a href="#PHP-FPM">PHP-FPM</a></h2> <p>/etc/php7-fpm.d/www.conf</p> <pre><code>request_terminate_timeout = 3600 </code></pre> <h1 id="nginx"><a href="#nginx">nginx</a></h1> <h2 id="SSL"><a href="#SSL">SSL</a></h2> <p>location ディレクティブブロック <code>location ~ [^/]\.php(/|$) {}</code> 内に記載があります。</p> <p>/etc/nginx/conf.d/kusanagi_html_ssl.conf</p> <pre><code>fastcgi_read_timeout 3600s </code></pre> <h2 id="HTTP"><a href="#HTTP">HTTP</a></h2> <p>SSL を用いている場合は不要ですが念の為。</p> <p>/etc/nginx/conf.d/kusanagi_html_http.conf</p> <pre><code>fastcgi_read_timeout 3600s </code></pre> <h1 id="最後に"><a href="#%E6%9C%80%E5%BE%8C%E3%81%AB">最後に</a></h1> <p>PHP (PHP-FPM), nginx の再起動を忘れずに。<br /> KUSNAGAI の場合は、以下のコマンドで PHP (PHP-FPM), nginx の再起動を同時に行ってくれます。</p> <pre><code>sudo kusanagi restart </code></pre> sola