ページ 502 のトラブルシューティングについて, ページ 502 のトラブルシューティング_PHP チュートリアル
关于页面502的一次排查,页面502排查
一、场景: 系统 Deepin 15;php 5.5.33;nginx 1.9.9
二、状况: 简单的页面输出正常(比如 phpinfo();),跑公司的任何一个项目,均502
三、排查
1、查询各种日志,包括 nginx.error.log、php_error.log、php-fpm.error.log,找到php-fpm报错如下
[22-Mar-2016 11:06:32] WARNING: [pool www] child 3665 exited with code 127 after 24.657496<span> seconds from start [22-Mar-2016 11:06:32] NOTICE: [pool www] child 3676 started</span>
2、最开始以为是由php-fpm进程数不足引起,便对php-fpm.ini做出如下修改
(这一步和网上很多的解决方案相同,但是没有效果)
pm.max_children = 20<span> pm.start_servers = 10<span> pm.min_spare_servers = 10<span> pm.max_spare_servers = 20<span> pm.process_idle_timeout =<span> 10s pm.max_requests = 500</span></span></span></span></span>
3、经过大量查询,有说是Linux文件句柄数不足
(忘记保留url和改动的地方,经过一番折腾也没有效果)
4、回归 php-fpm.error.log,通过 exited with code 127 查到
(http://www.faqs.org/docs/abs/HTML/exitcodes.html)
5、基于上一步才想起用 strace 来跟踪 php-fpm进程,方法分两种
(其实这一步早该尝试,Rango http://rango.swoole.com/archives/340)
5.1、把php-fpm的进程数限制设置为1,然后直接 strace -p 123456 进行跟踪单个进程
5.2、直接使用下面的命令批量跟踪进程
ps -ef | grep fpm | awk '{print "-p " $2}' | xargs strace
由于出问题的是自己的机子,没有其他人访问,所以使用第二个方法进行跟踪,部分结果如下
[pid 6744] fstat(5, {st_mode=S_IFREG|0644, st_size=5016, ...}) = 0<span> [pid 6744] mmap(NULL, 5016, PROT_READ, MAP_SHARED, 5, 0) = 0x7f132588f000<span> [pid 6744] munmap(0x7f132588f000, 5016) = 0<span> [pid 6744] close(5) = 0<span> [pid 6744] writev(2, [{"php-fpm: pool www", 17}, {": ", 2}, {"symbol lookup error", 19}, {": ", 2}, {"/usr/local/php/lib/php/extension"..., 71}, {": ", 2}, {"undefined symbol: mmc_queue_pop", 31}, {"", 0}, {"", 0}, {"\n", 1}], 10) = 145<span> [pid 6744] exit_group(127) = ?</span></span></span></span></span>
定为到报错信息 undefined symbol: mmc_queue_pop
6、既然是 memcache 扩展报错,便开始折腾,从基本编译命令开始
cd /data/memcache-3.0.8/<br />/usr/local/php/bin/<span>phpize ./configure --with-php-config=/usr/local/php/bin/php-<span>config<br />#sudo make clean #但存在多次编译安装时,最好都进行清除 sudo make sudo make install</span></span>
仔细查找,发现 ./configure 报了个 WARNING
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
于是开始补齐 re2c,并重新编译 memcache,重启 php-fpm,然而依旧报错
7、最后找到一篇文章,提及“我的memcache原来是从官网下的beta版,重新下载一个stable版本编译安装一下问题就OK了”
而我用的正是beta版的 memcache-3.0.8,于是马上下载stable版的 memcache-2.2.7 重新编译,问题成功解决。
(http://www.phpjiayuan.com/77/433.html)
四、特别申明:此文章所提及的东西,部分来自某开发群的大神们,在此鸣谢!
五、后记:此问题是不是只存在于 php 5.5.33 + memcache-3.0.8(beta),有待后续跟进

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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

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

ホットトピック









