ホームページ バックエンド開発 PHPチュートリアル Linux_php の例で php-fpm プロセスが多すぎることによって引き起こされるメモリ枯渇の問題を解決する

Linux_php の例で php-fpm プロセスが多すぎることによって引き起こされるメモリ枯渇の問題を解決する

Dec 04, 2017 pm 01:10 PM
linux php php-fpm

この記事では、Linux で php-fpm プロセスが多すぎることによって引き起こされるメモリ不足の問題を解決する方法を主に紹介します。php-fpm について詳しく知りたい場合は、この記事を参照して解決方法を学ぶことができます。 php-fpmプロセスのオーバーフローの問題 メモリ不足の原因はたくさんあります。

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

問題を分析する

問題を発見したら、まず free -m コマンドを使用して現在のサーバーの実行ステータスを確認します: free -m 指令查看当前服务器执行状况:

可以看到我的服务器内存是2G的,但是目前可用内存只剩下70M,内存使用率高达92%,很有可能是内存使用率过高导致数据库服务挂断。

继续看详细情况,使用 top 指令:

然后再看指令输出结果中详细列出的进程情况,重点关注第10列内存使用占比:

发现CPU使用率不算高,也排除了CPU的问题,另外可以看到数据库服务占用15.2%的内存,内存使用过高时将会挤掉数据库进程(占用内存最高的进程),导致服务挂断,所以我们需要查看详细内存使用情况,是哪些进程耗费了这么多的内存呢?

使用指令:


ps auxw|head -1;ps auxw|sort -rn -k4|head -40
ログイン後にコピー


查看消耗内存最多的前40个进程:

查看第四列内存使用占比,发现除了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,同时,检查以下两个属性:

pm.max_spare_servers : 该值表示保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.min_spare_servers : 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程;

这两个值均不能不能大于 pm.max_children 值,通常设置 pm.max_spare_servers 值为 pm.max_children

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


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


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

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

使用コマンド:

systemctl restart php-fpm
ログイン後にコピー

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


4 番目の列のメモリ使用率を確認すると、Mysql データベース サービスでは、php-fpm サービス プールが開いた子プロセスが多すぎて、メモリの半分以上を占有していました。問題が見つかり、問題の解決を開始しました。 php-fpm プロセス プールのプロセス数を制御します。


問題を解決する


さまざまな検索手段を通じて、次のことを見つけることができますpm.max_children 属性 を設定して PHP を制御できること-fpm 子プロセスの数量を指定するには、まず php-fpm設定ファイルを開き、次のコマンドを実行します。


えー

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を再起動します🎜🎜🎜🎜
 ps -fe |grep "php-fpm"|grep "pool"|wc -l
ログイン後にコピー
🎜🎜🎜🎜再度メモリ使用量を確認すると、メモリ使用量が大幅に減少しています:🎜🎜🎜🎜🎜 何度もメモリ使用量を観察した結果、この後改善により、サーバーのメモリ リソースの消費が大幅に軽減されます。 🎜🎜🎜🎜 ps: php-fpm によって開始されたプロセスの数と各プロセスのメモリ制限を確認します🎜🎜🎜🎜1. コマンドを使用して、サーバー上で開かれている php-cgi プロセスの数を確認します🎜🎜🎜🎜
 netstat -anp|grep "php-fpm"|grep "tcp"|grep "pool"|wc -l
ログイン後にコピー
🎜🎜🎜🎜 2. TCP リクエストの処理に使用される php-cgi プロセスの数を確認します🎜🎜🎜🎜🎜rrreee🎜🎜🎜🎜 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-fpmのステータス統計をオンにする方法php-fpm

introducingソリューションで説明されているコード共有Php-fpmメモリ使用量を減らす

以上がLinux_php の例で php-fpm プロセスが多すぎることによって引き起こされるメモリ枯渇の問題を解決するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHP:データベースとサーバー側のロジックの処理 PHP:データベースとサーバー側のロジックの処理 Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

CentosとUbuntuの違い CentosとUbuntuの違い Apr 14, 2025 pm 09:09 PM

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

PHPの目的:動的なWebサイトの構築 PHPの目的:動的なWebサイトの構築 Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

Centosはメンテナンスを停止します2024 Centosはメンテナンスを停止します2024 Apr 14, 2025 pm 08:39 PM

Centosは、上流の分布であるRhel 8が閉鎖されたため、2024年に閉鎖されます。このシャットダウンはCentos 8システムに影響を与え、更新を継続し続けることができません。ユーザーは移行を計画する必要があり、提案されたオプションには、Centos Stream、Almalinux、およびRocky Linuxが含まれ、システムを安全で安定させます。

Centosをインストールする方法 Centosをインストールする方法 Apr 14, 2025 pm 09:03 PM

Centosのインストール手順:ISO画像をダウンロードし、起動可能なメディアを燃やします。起動してインストールソースを選択します。言語とキーボードのレイアウトを選択します。ネットワークを構成します。ハードディスクをパーティション化します。システムクロックを設定します。ルートユーザーを作成します。ソフトウェアパッケージを選択します。インストールを開始します。インストールが完了した後、ハードディスクから再起動して起動します。

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

See all articles