【问题标题】:OpenSSL configure maximum number of connectionsOpenSSL 配置最大连接数
【发布时间】: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。
  • 它在什么操作系统上运行?

标签: c++ c openssl


【解决方案1】:

恕我直言,您似乎达到了一些限制。正如你所说,数字文件描述符是可以的。因此,您可以尝试使用ulimit 增加堆栈大小。例如:

ulimit -s 32768

此外,您可以使用valgrind 之类的工具来帮助您了解应用程序段错误时的实际情况。

希望对你有帮助。

【讨论】:

  • +1 用于提及valgrind,在这里使用肯定会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2016-09-17
  • 2013-04-20
  • 1970-01-01
  • 2015-07-01
  • 2022-10-05
  • 2012-01-16
  • 2015-06-04
  • 1970-01-01
相关资源
最近更新 更多