【发布时间】:2012-06-13 19:35:15
【问题描述】:
我的应用程序在SSL_read 中出现段错误之前,会保留 950-970 个 SSL 连接。是否可以将 OpenSSL 配置为接受比这更多的连接?
我已经对其进行了编程,使其在获取连接后不对其执行任何操作,所以我知道这是打开连接数的函数,而不是当前读/写的连接数或时间。
更新:
- ubuntu 上的相同错误在同一个地方。我正在开发 ubuntu。
- 如果我在连接数相同的情况下将机器大小(RAM、交换、CPU)加倍,则会出现同样的错误。
- 上下文不为空。
-
ulimit -n设置为 4096。我也通过设置ulimit -100验证了这一点,在这种情况下观察到不同的错误。 - 即使线程被池化,也会出现问题。问题发生在相同数量的连接上,无论是 1 个线程/连接还是 1 个线程/10 个连接。
我正在尝试从启用调试选项的源代码构建 OpenSSL。我开始怀疑这是否需要几个小时或告诉我任何有用的信息。我对此有疑问here.
我已经确定在 openssl v 1.0.1.c 的这一行上发生了段错误:
ssl_lib.c:968
968 return(s->method->ssl_read(s,buf,num));
此外,我确定这不是ssl_read 函数内部的段错误(它应该指向ssl3_read)。 method 的成员ssl_read 本身实际上是无效的,并且看起来method 本身也是无效的(我是根据“奇怪的地址”推断出来的。)
【问题讨论】:
-
你能准确定位出段错误的位置吗?
-
SSL_read 中某处 3/4 次,SSL_get_error 中一次。我不知道如何使用 gdb 更深入地了解内部,尽管我认为它涉及从源代码编译、虚拟化优化等。
-
您的系统是否内存不足或其他资源不足?
-
这不是不可能的,我猜 C 库只会出现段错误而不是给我一个“内存不足”异常。是否可以验证这一点?我还不得不增加可以打开的文件数的 ulimit。
-
它在什么操作系统上运行?