Unlocking Serverless PHP 9: A Deep Dive into AWS Lambda Performance Tuning for High-Throughput Laravel Applications
Optimizing PHP 9 Memory Limits for AWS Lambda
AWS Lambda’s execution environment imposes strict memory limits. For high-throughput Laravel applications, especially those leveraging newer PHP 9 features, efficient memory management is paramount. The default memory allocation might be insufficient, leading to `OutOfMemoryError` exceptions. We need to strategically increase this limit while being mindful of cost implications, as Lambda pricing is directly tied to allocated memory and execution duration.
When deploying a Laravel application to AWS Lambda using tools like Bref, memory limits are configured within the `serverless.yml` or `template.yaml` file. For PHP 9, which might have slightly different memory footprints for its extensions and core functionalities compared to previous versions, careful profiling is essential. A common starting point for a moderately complex Laravel app might be 512MB, but high-throughput scenarios often demand 1024MB or even 2048MB.
Configuring AWS Lambda Memory and Timeout Settings
The AWS Lambda console provides direct controls for memory and timeout. However, for infrastructure-as-code (IaC) deployments, these are managed within your serverless framework configuration. Here’s an example using the Serverless Framework:
service: my-laravel-app
provider:
name: aws
runtime: provided.al2023 # Or your specific PHP 9 runtime
region: us-east-1
memorySize: 1024 # In MB. Adjust based on profiling.
timeout: 60 # In seconds. Crucial for long-running requests.
environment:
APP_ENV: production
APP_DEBUG: false
# Other environment variables...
functions:
api:
handler: public/index.php
events:
- httpApi: '*'
layers:
- arn:aws:lambda:us-east-1:XXXXXX:layer:php-9-extension:1 # Example layer ARN
# Function-specific overrides if needed
memorySize: 2048 # Example: Override for a specific function
timeout: 120 # Example: Override for a specific function
Key Considerations:
memorySize: Start with a reasonable baseline (e.g., 512MB) and increase iteratively based on CloudWatch metrics. Monitor the `Max Memory Used` statistic.timeout: Set this sufficiently high to accommodate typical request durations, but not excessively so to avoid masking underlying performance issues or incurring unnecessary costs. For API Gateway integrations, the API Gateway timeout (30 seconds) is often the effective limit unless using Lambda proxy integration with a longer timeout.runtime: Ensure you are using a compatible PHP 9 runtime. AWS provides managed runtimes, or you can use custom runtimes with tools like Bref.layers: PHP extensions and custom binaries are often managed via Lambda Layers. Ensure your chosen PHP 9 layer is optimized and doesn’t introduce significant overhead.
Profiling PHP 9 Memory Usage in Lambda
Before blindly increasing memory, it’s critical to understand where your application is consuming memory. PHP’s built-in memory profiling tools, combined with Lambda’s execution context, require a specific approach.
We can leverage PHP’s built-in `memory_get_usage()` and `memory_get_peak_usage()` functions. For more granular insights, consider integrating a lightweight profiling library that can report memory allocations per request. For production environments, avoid verbose profiling that adds significant overhead.
A common strategy is to add logging statements at critical points in your request lifecycle (e.g., before and after controller execution, before and after database queries) to track memory usage.
// In your Laravel bootstrap/app.php or a middleware
use Illuminate\Support\Facades\Log;
// ...
$memoryStart = memory_get_usage();
$peakMemoryStart = memory_get_peak_usage();
// Your application logic here...
$memoryEnd = memory_get_usage();
$peakMemoryEnd = memory_get_peak_usage();
Log::channel('lambda')->info('Memory Usage Report', [
'request_id' => $_SERVER['AWS_REQUEST_ID'] ?? 'N/A',
'memory_current' => round(($memoryEnd - $memoryStart) / 1024 / 1024, 2) . ' MB',
'memory_peak_delta' => round(($peakMemoryEnd - $peakMemoryStart) / 1024 / 1024, 2) . ' MB',
'memory_peak_total' => round($peakMemoryEnd / 1024 / 1024, 2) . ' MB',
]);
Ensure your `config/logging.php` is set up to send logs to CloudWatch, potentially using a custom channel for Lambda-specific logs. For example:
// config/logging.php
'channels' => [
// ...
'lambda' => [
'driver' => 'single',
'path' => env('LAMBDA_LOG_PATH', '/tmp/laravel.log'), // Lambda's writable /tmp directory
'level' => env('LOG_LEVEL', 'debug'),
],
// ...
],
Then, in your `.env` file or Lambda environment variables:
LOG_CHANNEL=lambda LAMBDA_LOG_PATH=/tmp/laravel.log
Leveraging PHP 9 JIT and OpCache for Performance
PHP 9 continues to benefit from the Just-In-Time (JIT) compiler introduced in PHP 8 and the OpCache extension. For serverless environments, ensuring these are properly configured and enabled is crucial for reducing execution time and, consequently, memory usage per request.
When using custom runtimes or Bref, you can typically control `php.ini` settings. For managed runtimes, this might be less direct, but often configurable via environment variables or specific runtime configurations.
Here are key `php.ini` directives to consider:
[PHP] engine = On short_open_tag = Off asp_tags = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off serialize_precision = 17 disable_functions = "" disable_classes = "" zend.enable_gc = On expose_php = Off ; OpCache Configuration opcache.enable = 1 opcache.enable_cli = 1 opcache.memory_consumption = 128 ; Adjust based on application size and memory limit opcache.interned_strings_buffer = 16 opcache.max_accelerated_files = 10000 opcache.revalidate_freq = 2 opcache.validate_timestamps = 0 ; Crucial for serverless: disable timestamp validation in production opcache.save_comments = 1 opcache.load_comments = 1 opcache.enable_file_override = 0 opcache.optimization_level = 0xFFFFFFFF ; Enable all optimizations ; JIT Configuration (PHP 8+) zend.jit = tracing ; Or 'function' for less aggressive JIT zend.jit_buffer_size = 64M ; Adjust based on memory limit and workload zend.jit_hot_loop_max_iterations = 1000 zend.jit_hot_func_max_call_depth = 100 zend.jit_hot_func_max_stack_size = 1024 zend.jit_hot_func_max_return_size = 1024 zend.jit_hot_func_max_args = 10 zend.jit_hot_func_max_vars = 10 zend.jit_hot_func_max_loop_depth = 10 zend.jit_hot_func_max_loop_iterations = 1000 zend.jit_hot_func_max_loop_nesting = 10 zend.jit_hot_func_max_loop_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_iterations = 1000 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_nesting_depth = 10 zend.jit_hot_func_max_loop_nesting_nesting_nesting_nesting_nesting_nesting