SpringBoot2.x内置Tomcat调优,使用Apr模式

编程

  • 启用Apr模式,需要调用方法 org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory#setProtocol
  • windows下安装配置native和apr只需要在环境变量path里能够找到 tcnative-1.dll即可,这个文件在 高版本tomcatin 目录下会存在
  • linux下安装配置native和apr,参考 https://tomcat.apache.org/native-doc/

TomcatConfig.java

package site.yuyanjia.template.common.config;

import lombok.extern.slf4j.Slf4j;

import org.springframework.boot.context.properties.EnableConfigurationProperties;

import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;

import org.springframework.boot.web.servlet.server.ServletWebServerFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import java.lang.reflect.Field;

/**

* TomcatConfig

* <p>

* Tomcat优化:

* 1、增加JVM内存:java -jar -Xms256m -Xmx256m abc.jar

* 2、优化Tomcat配置参数

* 3、使用APR

*

* @author seer

* @date 2018/7/17 11:48

*/

@Configuration

@Slf4j

@EnableConfigurationProperties(ConfigProperties.class)

public class TomcatConfig {

@Bean

public ServletWebServerFactory servletWebServerFactory(ConfigProperties configProperties) {

ConfigProperties.Tomcat tomcat = configProperties.getTomcat();

TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory();

tomcatServletWebServerFactory.setProtocol(tomcat.getProtocol());

tomcatServletWebServerFactory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {

Field[] fields = tomcat.getClass().getDeclaredFields();

for (Field field : fields) {

field.setAccessible(true);

try {

connector.setAttribute(field.getName(), field.get(tomcat));

} catch (IllegalAccessException e) {

log.error("Tomcat connector 配置异常", e);

continue;

}

}

});

return tomcatServletWebServerFactory;

}

}

ConfigProperties.java

package site.yuyanjia.template.common.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**

* 配置资源

*

* @author seer

* @date 2018/7/24 14:38

*/

@ConfigurationProperties(value = ConfigProperties.PREFIX)

public class ConfigProperties {

public static final String PREFIX = "yuyanjia";

private Tomcat tomcat;

public Tomcat getTomcat() {

return tomcat;

}

public void setTomcat(Tomcat tomcat) {

this.tomcat = tomcat;

}

/**

* Tomcat配置文件

*

* @author seer

* @date 2018/7/24 14:45

*/

public static class Tomcat {

/**

* 连接超时,单位ms

*/

private Integer connectionTimeout = 20000;

/**

* 接收连接线程数量,参考cpu核数

*/

private Integer acceptorThreadCount = 2;

/**

* 最小监听线程

*/

private Integer minSpareThreads = 5;

/**

* 最大监听线程

* 同时相应客户请求最大值

*/

private Integer maxSpareThreads = 200;

/**

* 最大排队数

*/

private Integer acceptCount = 200;

/**

* 最大连接数

*/

private Integer maxConnections = 800;

/**

* 最大线程数

*/

private Integer maxThreads = 500;

/**

* 运行模式

*/

private String protocol = "org.apache.coyote.http11.Http11NioProtocol";

public Integer getConnectionTimeout() {

return connectionTimeout;

}

public void setConnectionTimeout(Integer connectionTimeout) {

this.connectionTimeout = connectionTimeout;

}

public Integer getAcceptorThreadCount() {

return acceptorThreadCount;

}

public void setAcceptorThreadCount(Integer acceptorThreadCount) {

this.acceptorThreadCount = acceptorThreadCount;

}

public Integer getMinSpareThreads() {

return minSpareThreads;

}

public void setMinSpareThreads(Integer minSpareThreads) {

this.minSpareThreads = minSpareThreads;

}

public Integer getMaxSpareThreads() {

return maxSpareThreads;

}

public void setMaxSpareThreads(Integer maxSpareThreads) {

this.maxSpareThreads = maxSpareThreads;

}

public Integer getAcceptCount() {

return acceptCount;

}

public void setAcceptCount(Integer acceptCount) {

this.acceptCount = acceptCount;

}

public Integer getMaxConnections() {

return maxConnections;

}

public void setMaxConnections(Integer maxConnections) {

this.maxConnections = maxConnections;

}

public Integer getMaxThreads() {

return maxThreads;

}

public void setMaxThreads(Integer maxThreads) {

this.maxThreads = maxThreads;

}

public String getProtocol() {

return protocol;

}

public void setProtocol(String protocol) {

this.protocol = protocol;

}

}

}

application.yml

yuyanjia:

tomcat:

connection-timeout: 10000

acceptor-thread-count: 4

min-spare-threads: 100

max-spare-threads: 300

accept-count: 200

max-connections: 800

max-threads: 500

protocol: org.apache.coyote.http11.Http11AprProtocol


 

以上是 SpringBoot2.x内置Tomcat调优,使用Apr模式 的全部内容, 来源链接: utcz.com/z/510978.html

回到顶部