Hello!
2015-08-17 22:24 GMT+08:00 Huang ChuanTong:
> gdb 显示需要安装 nginx-1.4.4-1.el6.x86_64, 这个可以无视。 ----- 可能的原因是我使用yum 安装了
> ngx-1.4.rpm 包版本,而并没有--with-debug编译, 而我手动下载1.8.0的源码进行编译,所以gdb误报。
覆盖你的系统 nginx 包的安装位置是一个很糟糕的主意。
> 的确,我认为是 nginx 核心的 bug,并不是openresty的bug 。
> 最小例子,我想只要打开ssl支持,并设置 ssl_session_cache shared:SSL:10k; // 一个很小的值,然后
> 并发大量ssl连接,注意要长连接。 ------- 这样应该能重现。
>
呃,你能自己先确认一下吗?“我想”还不足以让我们花费很多时间来反复为你做试验。毕竟我们在生产上已经使用最新的 nginx 用于 SSL
网关,同时也启用了 ssl_session_cache 并没有看到任何问题。
> 为什么ngx_ssl_new_session 不可能 返回null? 我修改过源码:
> if (shm_zone == NULL){
> ngx_log_error //确实能打印log,
> }
>
呃,再重复一下我上一封邮件中对此的答复:
“从这一部分的逻辑上看,shm_zone 在这里不可能为 NULL,因为 ngx_ssl_new_session 只会在 shm_zone
为非 NULL 时才会被注册为回调(见 src/event/ngx_event_openssl.c:2105)。”
你有看过 src/event/ngx_event_openssl.c 第 2105 行吗?
>
> 请教,如果是memory corruption, 应该如何查找问题?
可以考虑使用 Valgrind 或者 Address Sanitizer 这样的工具。当然,前提是你可以可靠地复现问题。
> 因为线上几个机器配置与压力基本一致,确实只有这台机出现段错误而崩,说不定真是的这个问题。
>
你是否使用了第三方 nginx 模块?如果是的话,请暂时禁用掉所有的 nginx 第三方模块,然后再试。当然,前提是,你自己可以可靠地复现问题。
Regards,
-agentzh