web-dev-qa-db-ja.com

Xdebugの「<Cycle1>」は何を示していますか?

Kcachegrindで解析したphpスクリプトにxdebugプロファイルがあります。これは、特定の関数内で費やされたほとんどの時間が<cycle 1>内で費やされ、上位の「呼び出し元」がindex.phpの「include」と「include_once」から作成されたことを示すスクリーンショットです。

kcachegrind of xdebug profile showing cycle 1

このプロファイルは、Apache'ab 'を使用したスト​​レステスト中に実行されたため、多数の同時接続が発生していました。

<cycle 1>はxdebugプロファイルで何を示していますか?

49
DTest

ヒューリスティックな循環検出です。ツールバーから、またはメニューの「表示->サイクルの検出」または「表示->サイクル検出の実行」からオフにすることができます。

サイクルは再帰のようなもので、直接(f() -> f() -> f()ここで_->_は呼び出しを意味します)と間接(f()->g()->f()->g()->f())の両方です

Callgring形式(kcachegrindで使用)は完全な呼び出しスタックを保存せず、呼び出し元と呼び出し先のペアのみを格納し、この情報からより長いサイクルを復元するのは難しい場合があります

36
osgx

@osgxは、あなたがサイクル検出をオフにできると述べていますが、ここで指摘したいのは、<cycle 1>はあなたが興味を持っている何かを隠しています、おそらくあなたはすべき彼が説明するようにサイクル検出をオフにします。

私の場合、サイクル検出を無効にすると、以前は欠落していたいくつかの重要な情報が実際に明らかになりました。

25
Cory Klein