この記事では、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

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

CPU 使用率は高くないことがわかり、CPU の問題は除外されます。また、データベース サービスは、メモリの 15.2% を占有していることがわかります。メモリ使用量が高すぎると、データベース プロセス (最も多くのメモリを消費するプロセス) が混雑してサービスがハングアップするため、詳細を確認する必要があります。どのプロセスが多くのメモリを消費しますか?
使用コマンド:
systemctl restart php-fpm
最も多くのメモリを消費する上位 40 のプロセスを表示:
問題を解決する
さまざまな検索手段を通じて、次のことを見つけることができます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 サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
