我用 Java 构建了一个自定义消息服务器,它接收消息流并将每条消息传递给其客户端(1:1,如果未连接,则丢弃 msg - 非常简单)。我在 Win7x64 和 Java 7 上运行 Tomcat 7,并且正在使用 NIO 连接器(实现了 Comet servlet)。它工作得很好,但我现在正在研究扩展这个野兽,目前看到为每个连接的客户端分配了大约 85kb 的 RAM。10.000 个客户端 @ 小于 900MB 并线性扩展。(除了保持连接之外,我没有做任何其他事情)我认为这很重要,所以我想知道是否有一些调整可以使 Tomcat 或 Java 使用它们的 NIO impl 节省更多内存。到目前为止,我尝试的所有 Tomcat 设置都没有影响到这一点。
有没有人有经验如何将 Java 或 Tomcat 放在有关套接字连接的内存饮食中?
更新:通过修剪套接字缓冲区和其他一些 tomcat 内部,我现在低于 70kb/连接。不确定这现在如何影响吞吐量。我也在 32bit / 64bit linux 上尝试过,结果相同。