Instana追踪问题:

The problem:与正常情况相比,有些请求需要额外20到60多个时间才能完成。
手动运行CURL显示了以下行为:
没有输出(我预计这是example.com/api
div class="aa
我希望在没有发生任何事情的情况下不会有20+秒的延迟。
捕获了通信的tcpdump


要注意的是,lat FCGI_STDOUT数据包延迟了50+秒,它包含几个字节(在本例中是json结束标记“]}”):
FastCGI (FCGI_STDOUT)
Version: 1
Type: FCGI_STDOUT (6)
Request ID: 1
Content Length: 6
Padding Length: 2
Content Data: 5c6e225d5d7d
Padding Data: 0000
FastCGI (FCGI_STDOUT)
Version: 1
Type: FCGI_STDOUT (6)
Request ID: 1
Content Length: 6
Padding Length: 2
Content Data: 5c6e225d5d7d
Padding Data: 0000My fpm设置:
# php-fpm -v
PHP 7.4.28 (fpm-fcgi) (built: Mar 29 2022 03:26:54)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.28, Copyright (c), by Zend Technologies
[www]
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen = 0.0.0.0:9000
listen.backlog = 1024
process.priority = 0
pm = dynamic
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.process_idle_timeout = 55
pm.max_children = 100
pm.start_servers = 10
pm.max_requests = 10000
slowlog = /var/log/php-fpm/slowlog.log
request_slowlog_timeout = 10
request_terminate_timeout = 600
user = www-data
catch_workers_output = yes
security.limit_extensions = .php .phar
pm.status_path = /status
php_admin_value[memory_limit] = 512M
php_admin_value[post_max_size] = 256M
php_admin_value[upload_max_filesize] = 256M
php_admin_value[max_execution_time] = 60
php_admin_value[opcache.revalidate_freq] = 0
php_admin_value[opcache.validate_timestamps] = 0
php_admin_value[opcache.max_accelerated_files] = 32531
php_admin_value[opcache.memory_consumption] = 512M
php_admin_value[opcache.interned_strings_buffer] = 128
php_admin_value[opcache.huge_code_pages] = 0
php_admin_value[zend.assertions] = 0
php_admin_value[max_input_vars] = 2000我的nginx设置:
# nginx -v
nginx version: nginx/1.20.1
upstream php {
server 127.0.0.1:9000;
}
server_tokens off;
server_names_hash_bucket_size 256;
client_max_body_size 256m;
server {
listen 80;
server_name xxx;
root /usr/share/xxx/public_api;
index index.php;
try_files $uri $uri/ /index.php?$args;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_header_timeout 120;
client_body_timeout 120;
send_timeout 120;
keepalive_timeout 60;
gzip on;
gzip_comp_level 4;
gzip_proxied any;
gzip_types application/atom+xml application/javascript application/json application/rss+xml
application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json
application/xhtml+xml application/xml font/opentype image/svg+xml image/x-icon text/css
text/plain text/x-component;
location ~ \.php$ {
fastcgi_connect_timeout 60s;
fastcgi_read_timeout 120s;
fastcgi_send_timeout 120s;
fastcgi_pass php;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param APPLICATION_ENV live;
fastcgi_param HTTPS off;
opentracing_fastcgi_propagate_context;
}
}更新:我设法追踪到Instana监控端的资源争用问题。在特定的条件下,使用TCP和悬挂php发送度量。
发布于 2022-04-12 10:15:08
没有看到您的应用程序,但看看这些问题,我会猜测它可能是自动的输出缓冲区刷新。
当缓冲区“满”时,它将自动输出到客户端。然后,使用现在为空的缓冲区,它将收集新的输入,直到缓冲区再次满为止,这可以解释您得到的间隔网络响应。
尝试将所有输出放入一个数组中,然后在最后返回一个implode(PHP_EOL, $response_data);
或者使用ob_get_contents()来创建自己的缓冲区。
ob_start();
echo "Hello World!";
$contents = ob_get_contents();
ob_end_clean();
echo "The contents of the buffer are: ";
echo $contents;这将防止过早输出,并可能实际上加快您的反应,因为回声是犯罪的慢与小字符串。
https://stackoverflow.com/questions/71840569
复制相似问题