0

我在 Windows 2008 上编写了一个简单而小型的服务器应用程序,它只接受连接,不做任何其他事情。我正在对套接字调用进行内存占用评估,我发现每个连接(在接受()之后)至少消耗 2.5 KB 的内存。有趣的是,内存不是由调用 accept() 的进程消耗的,而是由操作系统进程消耗的。我相信这可能是因为在操作系统内部为每个连接创建了数据结构。

现在,我有两个关键问题:

是否可以通过任何方式减少这种内存占用(通过更改任何参数、配置等)?如果是怎么办?(因为如果我们计划服务器接受数百万个连接,每个连接的 2K 就太多了)

如果我的服务器打算接受数百万个连接,那么使用 Windows 2008 是个好主意吗?还是我应该切换到其他操作系统?

请给我建议。

4

2 回答 2

1

2.5K 很可能在套接字缓冲区中。您可以使用 setsockopt SO_RECVBUF 和 SO_SNDBUF 调用来减小大小。将使用其他内存,但设置这些应减少内存占用。

这就是 http 服务器等可以一次扩展到数千个并发连接的方式。没有它,内存可能会很快耗尽。

查看此链接以获取更多信息: 如何保留一百万个同时 TCP 连接?

我应该指出,您的问题确实应该在 stackoverflow.com 上

于 2012-12-18T03:08:37.480 回答
0
  1. 不可以。连接结构必须由内核创建和跟踪,以便正确处理接收到的数据包。需要存储窗口大小、路径 MTU 和各种其他内容。您最终将需要接收缓冲区等。

  2. 如果不详细了解您的特定应用程序(所有这些连接实际上在做什么),就很难说。但是进行 200,000 个当前连接非常困难,并且需要非常熟悉该特定问题领域的人。

于 2012-12-18T02:37:14.777 回答