[alibaba/tengine]tengine 集群偶现耗时不符合预期(大于1s)

2024-01-16 218 views
2

现象

  1. tengine 集群偶现耗时不符合预期(大于1s),通过抓包分析确定是 tengine 侧发生的耗时,同时发现 nginx 进程负载不均匀,与的nginx进程偶尔利用率超过100%

  2. 尝试开启reuseport解决该问题,修改后灰度过程中发现部分业务反馈耗时增加,少量499请求

  3. 关闭reuseport之后499请求恢复

配置 nginx 配置 revice buffer 为 8M worker_connections 65535; worker_processes auto

日志相关 没有错误日志 access.log里面显示upstream_response_time 超过1s,但是在上游服务抓包显示耗时非上游服务

回答

4

如果连接调度在负载超过100%的worker进程,那么就会卡顿在此worker进程内,调度超时。 在CPU > 100%的worker进程,pstack看下hung的具体函数位置。

提供完整tengine的main 和 listen配置

1

server 配置 server { listen 80 default backlog=24576; listen [::]:80 default backlog=24576; servername ; client_body_buffer_size 1024k; client_header_buffer_size 1024k; large_client_header_buffers 8 1024k;

main配置 user root;

worker_processes auto; worker_cpu_affinity auto;

error_log /home/work/log/nginx/error.log; pid /home/work/log/nginx/nginx.pid;

worker_rlimit_nofile 200000; worker_shutdown_timeout 600;

events { use epoll; worker_connections 65535; } @lianglli

8
  1. 首先看下worker进程的CPU是否打散了,再确认一下你的worker进程数与CPU数是否相同的。 $pidstat | grep tengine

  2. worker进程100%时,输出pstack 查看cpu具体耗时在哪些functions $sudo pstack CPU跑满的worker进程ID

  3. 显示地设置一下: events { multi_accept off; use epoll; accept_mutex on; worker_connections 65535; }