検索
ホームページバックエンド開発PHPチュートリアル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 までご連絡ください。
セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?セッションに関連するクロスサイトスクリプティング(XSS)攻撃からどのように保護できますか?Apr 23, 2025 am 12:16 AM

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?PHPセッションのパフォーマンスを最適化するにはどうすればよいですか?Apr 23, 2025 am 12:13 AM

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

session.gc_maxlifetime構成設定とは何ですか?session.gc_maxlifetime構成設定とは何ですか?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

セッションIDをどのくらいの頻度で再生する必要がありますか?セッションIDをどのくらいの頻度で再生する必要がありますか?Apr 23, 2025 am 12:03 AM

セッションIDは、機密操作の前、30分ごとにログイン時に定期的に再生する必要があります。 1.セッション固定攻撃を防ぐためにログインするときにセッションIDを再生します。 2。安全性を向上させるために、敏感な操作の前に再生します。 3.定期的な再生は長期的な利用リスクを減らしますが、ユーザーエクスペリエンスの重量を量る必要があります。

PHPでセッションCookieパラメーターをどのように設定しますか?PHPでセッションCookieパラメーターをどのように設定しますか?Apr 22, 2025 pm 05:33 PM

PHPのセッションCookieパラメーターの設定は、session_set_cookie_params()関数を通じて達成できます。 1)この関数を使用して、有効期限、パス、ドメイン名、セキュリティフラグなどのパラメーターを設定します。 2)session_start()を呼び出して、パラメーターを有効にします。 3)ユーザーログインステータスなど、ニーズに応じてパラメーターを動的に調整します。 4)セキュリティを改善するために、セキュアとhttponlyフラグを設定することに注意してください。

PHPでセッションを使用する主な目的は何ですか?PHPでセッションを使用する主な目的は何ですか?Apr 22, 2025 pm 05:25 PM

PHPでセッションを使用する主な目的は、異なるページ間でユーザーのステータスを維持することです。 1)セッションはsession_start()関数を介して開始され、一意のセッションIDを作成し、ユーザーCookieに保存します。 2)セッションデータはサーバーに保存され、ログインステータスやショッピングカートのコンテンツなど、さまざまなリクエスト間でデータを渡すことができます。

サブドメイン間でセッションをどのように共有できますか?サブドメイン間でセッションをどのように共有できますか?Apr 22, 2025 pm 05:21 PM

サブドメイン間でセッションを共有する方法は?一般的なドメイン名にセッションCookieを設定することにより実装されます。 1.セッションCookieのドメインをサーバー側の.example.comに設定します。 2。メモリ、データベース、分散キャッシュなど、適切なセッションストレージ方法を選択します。 3. Cookieを介してセッションIDを渡すと、サーバーはIDに基づいてセッションデータを取得および更新します。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン