Openresty Reload CPU使用率彪高,499状态请求增加

363 views
Skip to first unread message

GuGu

unread,
Apr 29, 2019, 2:39:41 AM4/29/19
to openresty
 当前使用openresty/1.13.6.2版本,单机QPS 8K。在进行reload时服务器cpu使用率将近100%同时499请求增加(客户端超时500ms),猜测是因为nginx reload后cpu使用率增加导致请求处理时间增长,但是为什么会reload时cpu会彪高的原因未定位到,也没有较好的排查思路,请各位大神赐教。
499数量监控:1556519213851.jpg
CPU使用率:

1556518758010.jpg

Reload时间点:

1556519428845.jpg

nginx.conf配置文件(已删除与业务相关的配置):
worker_rlimit_nofile 40960;
worker_processes auto;
worker_rlimit_core 1g;
worker_cpu_affinity auto;;
pid /var/run/nginx.pid;

events {
    worker_connections  40960;
    accept_mutex on;
    accept_mutex_delay 100ms;
}

http {
    server_tokens off;
    resolver local=on;
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 256;
    check_shm_size 8m;
    

    sendfile on;
    keepalive_timeout 90;
    gzip  on;
    gzip_proxied any;
    gzip_comp_level 4;
    gzip_min_length 1000;
    gzip_types text/css application/javascript application/x-javascript application/json;

    ssl_session_cache   shared:SSL:50m;
    ssl_session_timeout 5m;
    ssl_prefer_server_ciphers on;

    

    client_body_buffer_size 256k;

    
    include /etc/nginx/conf.d/[0-9]*.conf;
    include /etc/nginx/conf.d/[a-z]*.conf;
}


Dan Liu

unread,
May 4, 2019, 9:53:25 PM5/4/19
to openresty
如果客户端在一个POST请求里同时发送multipart/form-data和application/json的数据,OpenResty里upload模块能正确解析吗?有无参考代码?

例如:
curl -v --basic -u'username' -F file="@documentTest.pdf;type=application/octet-stream" -F data='{"nomDocument":"test.pdf","externalid":"123456"};type=application/json' https://server.com/api/sendDocument

------------------
  此致
祝好

刘丹
手机:13925006500
 

Yichun Zhang (agentzh)

unread,
May 17, 2019, 6:18:31 PM5/17/19
to openresty
Hello!

当你有较多的 Lua 代码要载和 JIT 编译时,这是期望的。解决的办法有下面几种,建议同时使用:

1. 避免频繁地 reload nginx 进程,在某些局部 Lua 代码有更新时,使用 Lua 代码按需热加载的办法。

2. 上线前把所有 .lua 文件用同一个 OpenResty 自带的 luajit 命令行工具预编译为 LuaJIT
字节码文件,见这里:https://github.com/openresty/lua-nginx-module#lualuajit-bytecode-support
这可以节约 reload 或 binary upgrade 期间从 Lua 源码到 LuaJIT 字节码的编译开销。

3. 改用 binary upgrade 来重启服务,而不是 HUP reload。binary upgrade 时,在向老的 nginx
master 进程先后发送 USR2 和 QUIT 信号的中间时间间隔可以适当调大(几秒,几十秒,根据实际需要),这样可以给新启动的
worker 足够长的时间预热,而老 worker 在此过渡时间窗口内又可以继续高效地服务请求。而使用 HUP reload
则没法做到这一点了。

当然,实际确认你 reload 时的开销分布,需要上火焰图之类的工具进行分析了。一般情况就是我上面说的,但也不排除你们在 init 或
init_worker 阶段跑了自己的很重的逻辑。都有可能了。

Best,
Yichun


On Sun, Apr 28, 2019 at 11:39 PM GuGu <bianj...@gmail.com> wrote:
>
> 当前使用openresty/1.13.6.2版本,单机QPS 8K。在进行reload时服务器cpu使用率将近100%同时499请求增加(客户端超时500ms),猜测是因为nginx reload后cpu使用率增加导致请求处理时间增长,但是为什么会reload时cpu会彪高的原因未定位到,也没有较好的排查思路,请各位大神赐教。
> 499数量监控:
> CPU使用率:
>
> Reload时间点:
> --
> --
> 邮件来自列表“openresty”,专用于技术讨论!
> 订阅: 请发空白邮件到 openresty...@googlegroups.com
> 发言: 请发邮件到 open...@googlegroups.com
> 退订: 请发邮件至 openresty+...@googlegroups.com
> 归档: http://groups.google.com/group/openresty
> 官网: http://openresty.org/
> 仓库: https://github.com/agentzh/ngx_openresty
> 教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
Reply all
Reply to author
Forward
0 new messages