调整Tomcat内存消耗,套接字:socket.rxBufSize

时间:2014-07-28 15:37:55

标签: java performance sockets tomcat

我有一个Tomcat7应用程序,使用'长轮询'为数万个并发连接提供服务。 长轮询(简称)意味着我在向客户端发回响应(新数据或304代码)之前,长时间坚持请求。

我试图最小化这些连接消耗的内存量。 显而易见的低挂果是堆栈大小和app缓冲区大小(请参阅下面的我的Catalina连接器配置)。 但是,这还不够。

我看到了' socket.rxBufSize'和&#t; BufSize',他们的默认值相当大。 这些文件是:

  

(int)套接字接收缓冲区(SO_RCVBUF)大小(以字节为单位)。默认值为25188

  1. 套接字缓冲区 - 我猜测OS套接字缓冲区,这是正确的吗?
  2. 在宏观计划中,这些缓冲区在哪里?什么是他们的意义?
  3. 我在哪里可以控制Tomcat的最大套接字数量?它是maxThreads的功能吗?一到一个?
  4. 如果我愿意去减少他们的价值观,那么什么价值观才有意义?如果缓冲区太小会发生什么?

    connectionTimeout =" 3000"的KeepAliveTimeout =" 13000"         acceptorThreadCount =" 4" enableLookups ="假" MAXCONNECTIONS =" 100000" minSpareThreads =" 250" acceptCount =" 10000"压缩="上"         compressionMinSize =" 256" maxKeepAliveRequests =" -1" socket.appReadBufSize =" 128" socket.appWriteBufSize =" 1024"         maxThreads =" 500"

  5. 谢谢!

1 个答案:

答案 0 :(得分:1)

  1. 是的,本机套接字的缓冲区不足。
  2. 记忆力并不多,因为你只能开始使用这么多套接字。
  3. 不知道,请查看文档。
  4. 如果接收缓冲区很小,则发送端将发送较少的数据以避免阻塞接收器。如果接收器快速处理它获得的任何数据,它可以有一个大缓冲区,如果接收器较慢,接收缓冲区可以更小,因为实际吞吐量会更低(接收窗口将自动调整,所以发件人不会淹没接收者。)
  5. 我不知道你是否会因摆弄这些价值而获得任何重大改进,但你可以随时尝试。