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

Java 调整Tomcat内存消耗,套接字:socket.rxBufSize,java,performance,sockets,tomcat,Java,Performance,Sockets,Tomcat,我有一个Tomcat7应用程序,使用“长轮询”服务于数以万计的并发连接。 长轮询(简而言之)意味着在向客户机发回响应(新数据或304代码)之前,我会长时间保留请求 我正在尝试最小化这些连接所消耗的内存量。 明显的低挂果实是堆栈大小和应用程序缓冲区大小(请参阅下面我的Catalina连接器配置)。 然而,这还不够 我看到了“socket.rxBufSize”和“txBufSize”,它们的默认值相当大。 这些文件包括: (int)套接字接收缓冲区(SO_RCVBUF)大小(以字节为单位)。默认值为

我有一个Tomcat7应用程序,使用“长轮询”服务于数以万计的并发连接。 长轮询(简而言之)意味着在向客户机发回响应(新数据或304代码)之前,我会长时间保留请求

我正在尝试最小化这些连接所消耗的内存量。 明显的低挂果实是堆栈大小和应用程序缓冲区大小(请参阅下面我的Catalina连接器配置)。 然而,这还不够

我看到了“socket.rxBufSize”和“txBufSize”,它们的默认值相当大。 这些文件包括:

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

  • 套接字缓冲区-我猜是OS套接字缓冲区,对吗
  • 在大计划中,这些缓冲区在哪里?它们的意义是什么
  • 我在哪里控制Tomcat的最大插槽数?它是maxThreads的函数吗?一对一
  • 如果我去降低他们的价值观,什么价值观才有意义?缓冲区太小会发生什么

    connectionTimeout=“3000”keepAliveTimeout=“13000” AcceptorReadCount=“4”enableLookups=“false”maxConnections=“100000”minSpareThreads=“250”acceptCount=“10000”compression=“on” compressionMinSize=“256”MaxKeepAliverRequests=“-1”套接字。appReadBufSize=“128”套接字。appWriteBufSize=“1024” maxThreads=“500”

  • 谢谢大家!

  • 是的,Neth下本机套接字的缓冲区
  • 记忆不会太多,因为你只能从这么多的插座开始
  • 不知道,检查文档
  • 如果接收缓冲区很小,那么发送端将发送较少的数据,以避免阻塞接收器。如果接收器在处理其获得的任何数据时速度很快,那么它可以有一个大的缓冲区;如果接收器速度较慢,那么接收缓冲区可以更小,因为实际吞吐量会更低(接收窗口将自动调整,因此发送方不会淹没接收器)

  • 我不知道你是否会因为摆弄这些价值观而得到显著的改进,但你可以一直尝试。

    谢谢。2.如果max threads=500,这意味着IO有500个线程,这意味着500个套接字+-,对吗?4.AFAIK TCP数据包通常为1500(除非是碎片),巨型帧通常通过公共网络进行切片。但无论如何,发送端如何知道或关心接收缓冲区的大小?中间有一堆路由器和交换机如果接收端因为没有接受数据包的缓冲区而不断丢弃数据包,它会告诉发送端不要发送这么多数据(你说的数据包不太大是对的,但发送方一次可以发送更多的数据包)。我已经有一段时间没有读过TCP规范了,但也许你想这么做?:)TCP接收窗口是接收者限制发送者的一种方式。