TongWeb中通道的线程任务队列大小(queueSize)和TCP等待队列大小(acceptCount)参数的含义和关系

TongWeb中通道maxQueueSize和acceptCount参数的含义和区别

在 TongWeb中,maxQueueSize 和 acceptCount 是两个与请求处理队列相关的核心参数,它们共同作用于并发请求的接收和处理流程,但所处的层面和作用机制有显著区别。理解两者的差异和协作关系,对优化 TongWeb 高并发性能至关重要。

  • 参数定义与作用

1. acceptCount(操作系统层面的连接队列)

  • 作用:控制操作系统内核维护的 TCP 连接队列(backlog 队列) 的最大长度。当 TongWeb 的工作线程全部忙碌时,新到来的 TCP 连接会先进入该队列等待,直到有线程空闲后再被处理。
  • 本质:这是操作系统层面的队列,用于暂存 “已建立但未被 TongWeb 应用层处理” 的 TCP 连接。
  • 默认值:TongWeb8企业版默认值为500;TongWeb7嵌入式版本默认值为100。
  • 队列满时的行为:若队列已满,新的 TCP 连接会被操作系统直接拒绝,客户端会收到 “Connection Refused” 错误(无法建立连接)。

2. maxQueueSize(TongWeb 应用层面的请求队列)

  • 作用:控制 TongWeb 应用内部维护的 请求处理队列 的最大长度。当所有工作线程(由 maxThreads 控制)都在处理请求时,已建立 TCP 连接的请求会进入该队列等待线程空闲。
  • 本质:这是 TongWeb 应用层的队列,用于暂存 “已建立连接但未被线程处理” 的 HTTP 请求。
  • 默认值:TongWeb8企业版默认值为100000;TongWeb7嵌入式版本默认值未知(无限制?),且只能通过代码配置。
  • 队列满时的行为:若队列已满,TongWeb 会直接拒绝请求,并返回 HTTP 503 Service Unavailable 错误(连接已建立,但请求被拒绝处理)。
  • 工作流程与协作关系

当客户端向 TongWeb 发送请求时,流程如下:

  1. 建立 TCP 连接:客户端先与 TongWeb 服务器建立 TCP 连接,若此时 TongWeb 工作线程空闲,连接会直接被处理;
  2. 进入 acceptCount 队列:若工作线程全部忙碌,新的 TCP 连接会进入操作系统的 acceptCount 队列等待;
  3. 进入 maxQueueSize 队列:当工作线程从 acceptCount 队列中取出连接后,若线程仍忙碌,请求会被放入 TongWeb 应用层的 maxQueueSize 队列等待;
  4. 处理请求:工作线程空闲时,从 maxQueueSize 队列中取出请求并执行。

示意图

客户端请求 → TCP 握手 → [acceptCount 队列(操作系统)] → [maxQueueSize 队列(TongWeb 应用)] → 工作线程处理

  • 核心区别

维度

acceptCount

maxQueueSize

作用层面

操作系统内核(TCP 连接层)

TongWeb 应用层(HTTP 请求处理层)

队列内容

暂存 “已建立但未被 TongWeb 处理” 的 TCP 连接

暂存 “已被 TongWeb 接收但未被线程处理” 的 HTTP 请求

满队列行为

拒绝 TCP 连接(返回 Connection Refused)

拒绝 HTTP 请求(返回 503 错误)

依赖条件

与操作系统内核参数(如 net.core.somaxconn)相关

仅依赖 TongWeb 应用配置,与操作系统无关

版本支持

所有 TongWeb 版本均支持配置

TongWeb7嵌入式版本只能通过代码配置

默认值

TongWeb8企业版本500、TongWeb7嵌入式版100

TongWeb8企业版100000;TongWeb7嵌入式版本未知(无限制?)

  • 配置建议
  1. 高并发场景
    • 若客户端频繁出现 Connection Refused,说明 acceptCount 过小,需增大(如调整为 200-500);
    • 若频繁出现 503 错误,说明 maxQueueSize 或工作线程(maxThreads)不足,需根据请求处理耗时调整队列长度或增加线程数。
  2. 参数配合
    • 通常 maxQueueSize 应大于 acceptCount,避免应用层队列先满导致请求被拒绝;
  3. TongWeb8企业版本配置示例

在TongWeb8的通道配置中,有

<connector SSLDisableCompression="true" SSLDisableSessionTickets="false" SSLEnabled="false" SSLHonorCipherOrder="false" SSLVerifyClient="NONE" SSLVerifyDepth="10" URIEncoding="UTF-8" acceptCount="500" address="0.0.0.0" algorithm="SunX509" allowHostHeaderMismatch="false" allowMethods="GET,POST" asyncTimeout="30000" clientAuth="false" compressibleMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml" compression="off" compressionMinSize="2048" connectionLinger="-1" connectionTimeout="60000" connectionUploadTimeout="300000" defaultSSLHostConfigName="_default_" disableUploadTimeout="true" discardFacades="false" enableKAE="false" enableLookups="false" encodedSolidusHandling="reject" gmEnabled="false" http2Enabled="false" httpRedirect="true" ignoreHeader="false" keepAliveTimeout="60000" keystoreFile="conf/server.keystore" keystoreType="JKS" maxConnections="10000" maxCookieCount="200" maxExtensionSize="8192" maxHeaderCount="100" maxHttpHeaderSize="8192" maxKeepAliveRequests="1000" maxParameterCount="10000" maxPostSize="-1" maxSavePostSize="4096" maxSwallowSize="2097152" maxThreads="3" maxTrailerSize="8192" minSpareThreads="3" name="server" noCompressionStrongETag="true" parseBodyMethods="POST,PUT" pollerThreadCount="1" pollerThreadPriority="5" port="8088" portOffset="0" processorCache="1000" protocol="com.tongweb.coyote.http11.Http11NioProtocol" proxyPort="1" queueSize="100000" redirectPort="443" relaxedPathChars="&quot;&lt;&gt;[\]^`{|}" relaxedQueryChars="&quot;&lt;&gt;[\]^`{|}" scheme="http" secure="false" selectorTimeout="1000" sendfileSize="48" serverRemoveAppProvidedValues="false" sessionCacheSize="-1" sessionTimeout="86400" skipCharsValidate="false" sniParseLimit="65536" systemManaged="true" tcpNoDelay="true" threadKeepAliveTime="60" threadPriority="5" throwOnFailure="false" trustMaxCertLength="10" truststoreAlgorithm="PKIX" truststoreType="JKS" useBodyEncodingForURI="false" useIPVHosts="false" useKeepAliveResponseHeader="false" useNetworkMonitor="false" useSendfile="false" useServerCipherSuitesOrder="false" useVirtualThreads="false" xpoweredBy="false"/>

  1. TongWeb7企业版配置示例

在TongWeb7嵌入式版本中的配置

server.port=8089

#设置tongweb的最大工作线程数

server.tongweb.max-threads=3

#最小工作线程,连接池中应用保护的最小空余线路数

server.tongweb.min-spare-threads=1

#最大的线程等待队列数,当线程满后,线程的请求会进入次队列数,如果等待队列满了会拒绝请求

server.tongweb.max-queue-size=3

#最大连接数

server.tongweb.max-connections=3

#最大的连接等待队列大小,当连接数满后,连接会进入次等待队列,等待队列满后,连接会被拒绝

server.tongweb.accept-count=3

TongWeb7.0..e.7之前版本的max-queue-size不能直接配置,需要在代码中添加配置参数,如下:

@Configuration
public class TongWebConfig {

    @Value("${server.tongweb.max-queue-size:100}")
    private int maxQueueSize;

    @Bean
    public WebServerFactoryCustomizer<TongWebServletWebServerFactory> webServerFactoryCustomizer() {
        return factory -> factory.addConnectorCustomizers(
                (TongWebConnectorCustomizer) connector -> {
                    // 从配置文件读取 maxQueueSize 的值,默认为 100
                    //int maxQueueSize = 3; // 可以替换为从配置文件读取的值
                    connector.setAttribute("maxQueueSize", maxQueueSize);
                }
        );
    }
}

  1. 监控与调优
    • 通过 JMX 监控队列长度(如 acceptCount 使用率、maxQueueSize 排队数),避免队列过长导致请求超时;
    • 结合请求处理时间调整:若请求处理快(如 100ms 内),队列可设小些;若处理慢(如 1s+),队列可适当增大。
  • 总结
  • acceptCount 是 “连接入口” 的第一道防线,控制操作系统能暂存的最大连接数;
  • maxQueueSize 是 “请求处理” 的第二道防线,控制 TongWeb 应用能暂存的最大请求数;
  • 两者需配合 maxThreads(工作线程数)共同优化,避免因队列过小导致请求被拒,或队列过大导致内存溢出(OOM)。

Read more

企业出海必备!Hunyuan-MT-7B-WEBUI实战应用分享

企业出海必备!Hunyuan-MT-7B-WEBUI实战应用分享 在跨境电商、海外本地化、国际内容分发加速落地的今天,语言障碍早已不是“能不能翻”的问题,而是“翻得准不准、快不快、安不安全、用不用得顺手”的综合考验。某深圳智能硬件公司为进入拉美市场,需在两周内完成300+页产品说明书、用户协议、营销文案的西语本地化;某新疆出版社正推进维吾尔语古籍数字化工程,亟需稳定、可私有部署的民汉互译能力;还有大量中小企业,既不愿将敏感商业文档上传至公有云翻译API,又缺乏专职AI运维人员——这些真实场景,共同指向一个被长期忽视的痛点:专业级翻译能力,不该被部署门槛锁死在实验室里。 Hunyuan-MT-7B-WEBUI 正是为此而生。它不是又一个需要配环境、调参数、查报错的模型仓库,而是一套开箱即用的企业级翻译服务系统:镜像一键拉起,脚本一键加载,浏览器一键访问。你不需要知道什么是FlashAttention,也不必纠结CUDA版本兼容性,更无需写一行推理代码——只要你会复制粘贴,就能立刻开始高质量多语种翻译。 1. 为什么企业出海特别需要它?从语言覆盖到交付方式的三重突破 很多团队评估

SpringBoot+Vue 语言考试信息报名系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

SpringBoot+Vue 语言考试信息报名系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】

摘要 随着全球化进程的加快,语言能力成为个人职业发展和学术研究的重要基础。语言考试作为衡量语言水平的重要工具,其报名和管理流程的数字化需求日益增长。传统线下报名方式存在效率低、信息不对称、管理成本高等问题,亟需通过信息化手段优化。基于此,开发一套高效、便捷的语言考试信息报名系统具有重要的现实意义。该系统能够实现考生信息的统一管理、考试资源的合理分配以及报名流程的自动化,显著提升考试组织的效率和用户体验。关键词:语言考试、报名系统、信息化管理、效率优化、Java Web。 本系统采用SpringBoot作为后端框架,结合Vue.js前端技术,实现了前后端分离的高效开发模式。系统功能涵盖用户注册与登录、考试信息发布、在线报名、成绩查询以及后台管理等多个模块。数据库使用MySQL存储考生信息、考试安排及成绩数据,并通过SQL脚本实现数据的规范化管理。接口文档采用Swagger生成,便于前后端协作开发。系统设计注重安全性和可扩展性,采用JWT进行用户认证,同时支持高并发场景下的稳定运行。关键词:SpringBoot、Vue.js、MySQL、JWT、Swagger。 数据表设计 考生信

Spring Boot携手Leaflet,点亮省级旅游口号WebGIS可视化之路

Spring Boot携手Leaflet,点亮省级旅游口号WebGIS可视化之路

目录 前言 一、旅游口号信息管理 1、写在前面的 2、空间属性关联 二、SpringBoot后台实现 1、系统调用时序图 2、Mapper数据查询实现 3、控制层接口实现 三、Leaflet集成实现WebGIS 1、省级数据展示及可视化 2、东北三省旅游口号 3、长三角城市群口号 4、珠三角旅游口号 5、西北地区旅游口号 四、总结 前言         在当今数字化浪潮汹涌澎湃的时代,地理信息系统(GIS)技术正以前所未有的速度改变着我们对世界的认知与探索方式。它不仅为科学研究提供了强大的工具,更在旅游、城市规划、环境保护等诸多领域展现出巨大的应用潜力。而当我们将目光聚焦于旅游行业,一个充满活力与创新的领域,GIS技术的应用更是如鱼得水,为旅游体验的提升和旅        游管理的优化带来了全新的机遇。         省级旅游口号作为各地旅游宣传的重要名片,承载着地域文化的精髓与旅游资源的亮点,是吸引游客、塑造旅游品牌形象的关键要素。然而,传统的旅游口号宣传方式往往局限于文字、

【AI】coze的简单入门构建智能体

【AI】coze的简单入门构建智能体

前言:最近扣子很火,我来学习一下!扣子时新一代的AI应用平台。在扣子上搭建AI应用,只需要在界面上点击下一步下一步,做些配置,就可以快速去搭建一个AI应用。让我来看看,扣子是何方神圣吧~ 一、什么是coze? 扣子是新一代AI应用开发平台。无论你是否有编程基础,都可以在扣子上快速搭建基于大模型的各类AI应用,并将AI应用发布到各个社交平台,也可以通过API或SDK将AI应用集成到你的业务系统中。 二、coze能做什么? 扣子提供可视化设计与编排工具,通过零代码或低代码方式,快速搭建基于大模型的各类AI项目。(登录到扣子官网,进入到商店,有各种应用、插件等) * 智能体:智能体是基于对话的AI项目,能理解自然语言,调用知识库与插件,通过可视化工作流完成复杂任务,并可发布到多端使用,如智能客服、虚拟伴侣等 * 应用:利用大模型技术开发的应用程序。在扣子中搭建的AI应用具备完整业务逻辑和可视化用户界面,是一个独立的AI项目,如AI搜索、翻译工具等 * 插件:是 一个工具集,一个插件内可以包括一个或多个工具(API)。用于扩展智能体 / Bot 的功能,通过标准化接口与工作