php使用multicurl变慢,php - php-fpm慢日志:curl_multi_select耗时10秒 - 堆栈内存溢出

程成天
2023-12-01

我有一个奇怪的问题。 在具有nginx和php-fpm的亚马逊m4.large上,它位于负载平衡器之后,并且当访问者达到一定数量时具有memcached和s3存储桶,该实例的CPU在很短的时间内命中率接近97%。 我启用了php-fpm的慢速日志记录功能,并发现了以下多次出现:

script_filename = /var/www/xxx/web/app.php

[0x00007f231c23c6c0] curl_multi_select() /var/www/xxx/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php:101

[0x00007f231c23c560] tick() /var/www/xxx/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php:125

[0x00007f231c23c448] execute() /var/www/xxx/vendor/guzzlehttp/promises/src/Promise.php:246

[0x00007f231c23c338] invokeWaitFn() /var/www/xxx/vendor/guzzlehttp/promises/src/Promise.php:223

[0x00007f231c23c208] waitIfPending() /var/www/xxx/vendor/guzzlehttp/promises/src/Promise.php:267

[0x00007f231c23c0d8] invokeWaitList() /var/www/xxx/vendor/guzzlehttp/promises/src/Promise.php:225

[0x00007f231c23bfa8] waitIfPending() /var/www/xxx/vendor/guzzlehttp/promises/src/Promise.php:267

[0x00007f231c23be78] invokeWaitList() /var/www/xxx/vendor/guzzlehttp/promises/src/Promise.php:225

[0x00007f231c23bd48] waitIfPending() /var/www/xxx/vendor/guzzlehttp/promises/src/Promise.php:62

[0x00007f231c23bc08] wait() /var/www/xxx/vendor/aws/aws-sdk-php/src/AwsClientTrait.php:58

[0x00007f231c23bac0] execute() /var/www/xxx/vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php:319

[0x00007f231c23b998] getMetadata() /var/www/xxx/vendor/league/flysystem-aws-s3-v3/src/AwsS3Adapter.php:342

[0x00007f231c23b8a0] getSize() /var/www/xxx/vendor/league/flysystem/src/Filesystem.php:329

[0x00007f231c23b720] getSize() /var/www/xxx/vendor/league/glide-symfony/src/Responses/SymfonyResponseFactory.php:38

我想做的是从S3存储桶中获取图像。 我正在执行此代码的实例和存储桶都位于相同的aws区域中。 因此,延迟应非常低。 我已经使用以下参数配置了aws-sdk-php:

timeout = 5

connect_timeout = 1

delay = 0

PHP和PHP-FPM的版本为5.6.36

这是php-fpm配置的结果:

pm = dynamic

pm.max_children = 505

pm.start_servers = 15

pm.min_spare_servers = 15

pm.max_spare_servers = 135

pm.max_requests = 5000

当访问者上升并且CPU负载达到〜97%时,负载均衡器的延迟时间达到峰值。 虽然RAM使用率很低。 有人花了这么长时间对curl_multi_selection()有类似的问题吗?

 类似资料: