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