オンラインに php スクリプトがあり、ある日突然問題が発生し、処理されずにプロセスが終了しなかったとします。この状況は、異常なスリープまたはコードの無限ループが原因である可能性がありますが、それを特定するにはどうすればよいでしょうか? 現時点で最も知りたいのは、このスクリプトが現時点で何を行っているかということです。これは、gdb zbacktrace が使用されている場合に便利です。
まず、テストスクリプトtest.phpを作成し、その中にsleep関数を記述しますが、これを無限ループに変更することもできます。
<?phpfunction Mecho($i){ echo $i.PHP_EOL; }$i = 20;while($i>0){if($i%2==0){ Mecho($i); }sleep(100000);$i--; }
zbacktrace は、ダウンロードした php ソース コード パッケージで利用できます。現在の環境は新しくインストールされ、現在の php バージョンは php7.2.9
直接 cli 実行 test.php
php test.php
次に、現在の php プロセスを見つけます。
次に、gdb を使用してデバッグします。
gdb -p 56571
Debugging
source /usr/local/src/php-7.2.9/.gdbinit zbacktrace
この時点で、test.phpの11行目のsleep関数がプロセスをスリープさせていることが分かりました。
関連チュートリアル: PHP ビデオ チュートリアル
以上がGdb デバッグ php は現在実行中のコードを簡単に見つけますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。