ホームページ  >  記事  >  バックエンド開発  >  Linuxでプロセスが多すぎてphp-fpmがメモリ不足になる問題を解決する方法

Linuxでプロセスが多すぎてphp-fpmがメモリ不足になる問題を解決する方法

php中世界最好的语言
php中世界最好的语言オリジナル
2017-12-20 14:11:521740ブラウズ

私の個人ブログの Linux サービスで、データベース サービスが頻繁に利用できなくなり、正常にアクセスするには再起動する必要があることがわかりました。そのため、この問題の解決策を紹介します。

問題を分析する

問題を発見したら、まずfree -mコマンドを使用して現在のサーバーの実行ステータスを確認します:


サーバーのメモリは2Gであることがわかりますが、現在利用可能なメモリは70Mしかありませんメモリ残量とメモリ使用率が 92% と高いため、メモリ使用量が多すぎてデータベース サービスがハングアップする可能性が非常に高くなります。

引き続き詳細を確認し、一番上のコマンドを使用します:


次に、列 10 のメモリ使用率に注目して、コマンド出力結果にリストされているプロセスの詳細を確認します:


が見つかります。 CPU 使用率が高くないと考えられ、CPU の問題も解消されます。また、メモリ使用率が高すぎると、データベース サービスがメモリの 15.2% を占有していることがわかります。プロセス (最も多くのメモリを占有するプロセス) が原因でサービスがハングアップするため、詳細なメモリ使用量を確認する必要があります。どのプロセスが多くのメモリを消費しているか?

コマンドを使用します:

ps auxw|head -1;ps auxw|sort -rn -k4|head -40


最も多くのメモリを消費する上位 40 のプロセスを表示します:


4 番目の列のメモリ使用率を確認すると、mysql データベース サービスに加えて、php-fpm サービス プールがオープンされている子プロセスが多すぎるため、メモリの半分以上が占有されているという問題が見つかり、php-fpm プロセス プールのプロセス数の設定と制御という問題の解決に着手しました。

問題の解決

さまざまな 検索手段を通じて、pm.max_children プロパティを設定することで php-fpm 子プロセスの数を制御できることがわかりました。 まず、php-fpm設定ファイルを開き、次のコマンドを実行します:

vi /etc/php-fpm.d/www.conf


pm.max_children フィールドを見つけて、その値が大きすぎることがわかりました:


図に示すように、pm.max_children 値は 50 です。各プロセスは 1% を占めています。メモリの 2.5% なので、合計するとメモリの半分以上になります。そのため、このブロガーは値を 25 に設定します。同時に、次の 2 つのプロパティを確認します:

pm.max_spare_servers:この値は、アイドル プロセスの保証される最大数を示します。アイドル プロセスがこの値より大きい場合は、pm.min_spare_servers をクリーンアップします。アイドル プロセスの最小数がこの値より小さい場合は、新しい子を作成します。プロセス;

これら 2 つの値はどちらも pm.max_children 値より大きくすることはできません。通常、pm.max_spare_servers 値を .max_children 値の pm 60% ~ 80% に設定します。

最後に、php-fpmを再起動します

systemctl restart php-fpm


メモリ使用量を再度確認すると、メモリ使用量が大幅に削減されています:


メモリ使用量を何度も観察した結果、この改善後、サーバーがメモリリソースの消費が大幅に削減されました。

ps: php-fpm によって開始されたプロセスの数と各プロセスのメモリ制限を確認します

1. コマンドを使用して、サーバー上で開かれている php-cgi プロセスの数を確認します

ps -fe |grep "php-fpm"|grep "pool"|wc -l


2。すでにいくつあるか php-cgi プロセスは tcp リクエストの処理に使用されます

netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l


3 linux+nginx+php 環境では、各 php-fpm プロセスのメモリ制限

設定方法:

編集php-fpm.conf 設定ファイル

php_admin_value[memory_limit] = 128M (サーバー上の設定ファイルは /etc/php5/fpm/pool.d/www.conf にあります。このファイルは php-fpm.conf に含まれています) ) 次の数値は自由に変更できます: 32M、64M、128M、256M、512M。この設定はサーバーのメモリ サイズとニーズに応じて書き込むことができます。変更後、php-fpm サービスをロードする必要があります。


これらの事例を読んだ後は、その方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

関連書籍:

二分探索の詳細な例とJavaアルゴリズムでの二分探索

JavaScriptの二分探索の詳細な説明_javascriptスキル

javascript配列(順序付けされた)リスト内の検索文字の位置を半分にする_javascriptヒント

以上がLinuxでプロセスが多すぎてphp-fpmがメモリ不足になる問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。