Apache Tomcat 9.0.16配置maxConcurrentStream相关属性报错求助
解决Tomcat 9.0.16 HTTP/2属性配置警告的问题
我来帮你梳理下问题根源,以及对应的修正方案:
问题核心原因
你遇到的警告主要来自两个配置错误:
1. 属性配置方式不对
你把maxConcurrentStreamExecution和maxConcurrentStreams直接写在了<UpgradeProtocol>标签的属性列表里,但Tomcat的配置解析规则会把这些属性当成<Connector>的属性处理——而Connector本身并没有这两个属性,自然会抛出"找不到匹配属性"的警告。
在Tomcat中,像Http2Protocol这类嵌套组件的属性,必须通过<SetProperty>子标签来传递,不能直接写在父标签的属性里。
2. 属性名称与版本不兼容
你提到的maxConcurrentStreamExecution属性,在Tomcat 9.0.16中并不存在。大概率是你参考了更高版本的Tomcat文档:这个属性是在Tomcat 9.0.20及以后版本才添加的,而且正确的属性名是复数形式的maxConcurrentStreamExecutions。
Tomcat 9.0.16的Http2Protocol只支持maxConcurrentStreams这一个你提到的属性,它的默认值确实是20。
正确配置示例
根据你的需求,修正后的配置应该是这样的:
<Connector port="9191" URIEncoding="UTF-8" sslImplementationName="org.apache.tomcat.util.net.openssl.OpenSSLImplementation" protocol="org.apache.coyote.http11.Http11Nio2Protocol" maxThreads="50000" SSLEnabled="true" compressibleMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml" compression="on" minSpareThreads="25" noCompressionUserAgents="gozilla, traviata" scheme="https" secure="true" keystoreFile="conf/keystoreFile.keystore" keystorePass="password"> <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"> <!-- 设置HTTP/2最大并发流数 --> <SetProperty name="maxConcurrentStreams" value="100"/> <!-- 若升级到Tomcat 9.0.20+,可添加此属性控制并发流执行数 --> <!-- <SetProperty name="maxConcurrentStreamExecutions" value="100"/> --> </UpgradeProtocol> </Connector>
额外建议
你设置的maxThreads="50000"数值过高,很容易导致服务器内存耗尽。建议根据服务器的CPU核心数和内存配置调整这个值,一般推荐设置为CPU核心数 * 2或CPU核心数 * 4,同时配合合理的acceptCount(请求队列大小)来平衡性能与资源占用。
内容的提问来源于stack exchange,提问作者Zyber
相关产品推荐
相关产品推荐

