当前位置: 首页 > 知识库问答 >
问题:

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

卞俊贤
2023-03-14

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

>

  • 套接字缓冲区-我猜是OS套接字缓冲区,对吗?
  • 在事物的宏伟计划中,这些缓冲站在哪里?它们的意义是什么?
  • 在哪里控制Tomcat的最大套接字数?它是MaxThreads的函数吗?一对一?
  • 如果我去降低它们的值,什么值是有意义的?缓冲区太小会发生什么?

    connectiontimeout=“3000”keepalivetimeout=“13000”acceptorthreadcount=“4”enableLookups=“false”maxconnections=“100000”minsparethreads=“250”acceptcount=“10000”compression=“on”compressionminsize=“256”maxkeepaliverequests=“-1”socket.appreadbufsize=“128”socket.appwritebufsize=“1024”maxthreads=“500”

    谢谢!

  • 共有1个答案

    姬天宇
    2023-03-14
    1. 是的,本机套接字的缓冲区位于下面。
    2. 记忆不多,因为一开始只能有这么多套接字。
    3. 不知道,请查看文档。
    4. 如果接收缓冲区较小,那么发送端将发送较少的数据,以避免阻塞接收端。如果接收方处理任何数据的速度快,那么它可以有一个大的缓冲区;如果接收方速度慢,那么接收缓冲区可以小一些,因为实际吞吐量会更低(接收窗口无论如何都会自动调整,这样发送方就不会淹没接收方)。

    我不知道您是否会从摆弄这些值中获得任何显著的改进,但您可以随时尝试。

     类似资料:
    • 不是内存泄漏或类似的问题,因为第一次连接后内存使用量不会增加,所以优化可能是加载更少的模块或做一些不同的事情...

    • 开始使用akka-streams,我想构建一个简单的示例。在chrome中,使用web套接字插件,我可以通过并发送2个命令,简单地连接到这样的流https://blockchain.info/api/apiwebsocket 将在chromes web socket插件窗口中传输结果。 我试图在akka流中实现相同的功能,但面临一些问题: 执行了2个命令,但我实际上没有获得流输出 同一命令执行两次

    • 用户上传一个由一百万字组成的巨大文件。我解析文件并将文件的每一行放入< code>LinkedHashMap中 我需要按键访问和删除O(1)。此外,我需要保留访问顺序,从任何位置迭代并排序。 内存消耗是巨大的。我启用了的重复数据删除功能,该功能出现在Java 8中,但事实证明,消耗了大部分内存。 我找到了< code>LinkedHashMap。Entry占用40个字节,但是只有2个指针——一个指

    • 问题内容: 我需要监视应用程序产生的线程消耗的内存量。如果贪婪的线程消耗太多内存,则想法是采取纠正措施。我已提到Java线程占用多少内存?。关于该链接的建议之一是在我尝试以下工作时使用。 我在四个线程上运行了很长时间。尽管作业不会连续地累积内存,但是所返回的值会不断增加,甚至不会下降。这意味着不会返回线程使用的堆上的实际内存量。它返回自线程启动以来在堆上为线程分配的内存总量。我的平台详细信息如下:

    • 我需要监控应用程序生成的线程所消耗的内存量。如果贪婪的线程占用了太多内存,那么我们可以采取纠正措施。我提到了我的java线程需要多少内存?。关于该链接的建议之一是在ThreadMXBean中使用getThreadAllocatedBytes 我用以下作业试验了getThreadAllocatedBytes。 我在四个线程上运行了相当长的时间。虽然作业不会连续累积内存,但getThreadAlloc

    • 调整内存的使用以及Spark应用程序的垃圾回收行为已经在Spark优化指南中详细介绍。在这一节,我们重点介绍几个强烈推荐的自定义选项,它们可以 减少Spark Streaming应用程序垃圾回收的相关暂停,获得更稳定的批处理时间。 Default persistence level of DStreams:和RDDs不同的是,默认的持久化级别是序列化数据到内存中(DStream是StorageLe