ホームページ  >  記事  >  バックエンド開発  >  Linux での php-fpm プロセスの多すぎによるメモリ枯渇の問題の解決方法の詳細な説明

Linux での php-fpm プロセスの多すぎによるメモリ枯渇の問題の解決方法の詳細な説明

jacklove
jackloveオリジナル
2018-07-07 17:55:372900ブラウズ

この記事では、Linux で php-fpm プロセスが多すぎることによって引き起こされるメモリ不足の問題を解決する方法を主に紹介します。必要な友人は参考にしてください。

最近、Linux サーバーとデータベースが私の個人ブログのサービスは頻繁にハングアップするため、正常にアクセスする前に再起動する必要があり、これが非常に不快だったので、問題の解決に着手して時間とエネルギーを解放することにしました (私は望んでいませんでした)。頻繁に問題が発生し、手動で再起動する必要がありましたが、これは面倒で時間がかかりました)。

問題を分析する

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

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

引き続き詳細を確認するには、top コマンドを使用します。

次に、コマンド出力にリストされているプロセスの詳細を確認します。列 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 値は、pm.max_children 値の 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 サービスをロードします。

概要

上記は、エディターが紹介した、Linux での php-fpm プロセスが多すぎることによって引き起こされるメモリ枯渇の問題に対する解決策です。ご質問がございましたら、メッセージを残してください。すぐにご返信させていただきます。また、php 中国語 Web サイトをサポートしていただきありがとうございます。

興味があるかもしれない記事:

php でチェックイン機能を実装するメソッドの例の詳細な分析

php Linux での -fpm パラメーター 構成の導入とパラメーターの最適化手順の詳細な説明

# Laravel でのデータ移行とデータ入力の詳細な説明

##

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

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