PHP 5 の深いコールスタック
Dash が新機能を発表!インシデントマネジメント、Continuous Profiler など多数の機能が追加されました! Dash イベントで発表された新機能!

PHP 5 の深いコールスタック

PHP は、事実上無限のコールスタックをサポートします。ただし、Zend Engine により提供された関数呼び出しのフック zend_execute_ex (PHP 5.4 では zend_execute) は、ネイティブ C スタックを使用して PHP メソッドと関数を呼び出します。これは、PHP のコールスタックがとても深い場合にスタックオーバーフローの原因となります。

ddtrace バージョン 0.48.0 以降、PHP トレーサーは PHP 5 で zend_execute_ex フックを使用します。コーススタックが 512 フレームの深さに達すると、PHP トレーサーが警告を発します。環境変数を DD_TRACE_WARN_CALL_STACK_DEPTH=0 に設定すると、この警告を無効にできます。

PHP アプリケーションを非常に深いコールスタックに対応させるには、ホストマシンでスタックサイズ上限を調整します。既存のスタックサイズを確認するには、次を実行します。

$ ulimit -s

たとえば、既存のスタックサイズが 8192 の場合、スタックサイズを 2 倍の 16384 に設定します。

$ sudo ulimit -s 16384

このページ