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

构建基于Go语言的高性能命令行AI对话客户端:从环境部署到核心实现

构建基于Go语言的高性能命令行AI对话客户端:从环境部署到核心实现

前言 在现代软件开发领域,Go语言凭借其卓越的并发处理能力、静态类型安全以及高效的编译速度,已成为构建命令行工具(CLI)的首选语言之一。本文将详细阐述如何在Ubuntu Linux环境下部署Go开发环境,并结合蓝耘(Lanyun)提供的DeepSeek大模型API,手写一个支持多轮对话、上下文记忆的智能终端聊天工具。 一、 基础运行环境的准备与构建 任何上层应用的稳健运行都离不开坚实的底层系统支持。本次部署的目标环境为Ubuntu LTS系列(20.04/22.04/24.04),这些长期支持版本保证了系统库的稳定性与安全性。硬件层面,建议配置至少1GB的内存与5GB的磁盘空间,以满足编译器运行及依赖包缓存的需求。 1. 系统包索引更新与系统升级 在进行任何开发工具安装之前,首要任务是确保操作系统的软件包索引与现有软件处于最新状态。这不仅能修复已知的安全漏洞,还能避免因依赖库版本过旧导致的编译错误。 执行系统更新操作: sudoapt update &&sudoapt upgrade -y 该指令分为两部分:apt update 用于从软件源服务器获取最新的软件包列

AutoGPT+Python:让AI智能体自动完成复杂任务的终极指南

AutoGPT+Python:让AI智能体自动完成复杂任务的终极指南

AutoGPT+Python:让AI智能体自动完成复杂任务的终极指南 引言:在人工智能迈向自主化的新阶段,AutoGPT作为基于大语言模型(LLM)的自主智能体代表,正掀起一场让AI自己思考、自主执行的技术革命。当它遇上Python的全栈生态与极致灵活性,开发者不再只是调用AI接口,而是能深度定制专属智能体——让AI听懂自然语言、拆解复杂目标、调用外部工具、联网检索信息、迭代优化结果,独立完成从市场调研、内容创作、代码开发到自动化运维的全流程任务。 本文从核心原理、本地部署、Python实战、插件扩展、生产优化五大维度,手把手带你从0到1搭建可落地、可监控、可进化的AI智能体系统,不管是AI爱好者、全栈开发者还是创业者,都能靠这份指南,掌握下一代人机协作的核心生产力。 一、先搞懂:AutoGPT到底是什么? 传统ChatGPT类模型是被动应答,你问一句它答一句,需要人工一步步引导;而AutoGPT是自主智能体,你只给它一个最终目标,它就能自己完成: * 任务拆解:把复杂目标拆成可执行子步骤 * 自主决策:判断下一步该做什么、调用什么工具 * 记忆管理:短期记忆存上下文

OpenClaw 2026.3.13 重磅发布:Dashboard-v2 开启本地 AI 助理“控制台革命”,Agent 协同效率飞跃

OpenClaw 2026.3.13 重磅发布:Dashboard-v2 开启本地 AI 助理“控制台革命”,Agent 协同效率飞跃

发布时间:2026 年 3 月 13 日 核心标签:#OpenClaw #本地AI #开源架构 #Dashboard-v2 #AI助理 📝 前言:本地 AI 的“iPhone 4”时刻 在 AI 领域,2026 年被公认为是“本地私有化”爆发的元年。随着隐私政策的收紧和边缘计算能力的跃升,曾经高度依赖 API 的开发者们纷纷转向本地部署。 就在今天凌晨,备受瞩目的开源项目 OpenClaw 正式将开发分支 bump 至 2026.3.13,同时发布了稳定版 v2026.3.12。这不仅仅是一个版本号的跳跃,更是 OpenClaw 从“极客命令行工具”向“