高并发访问数据库优化

秒杀项目终于基本完成了,对于数据库的高并发访问优化也有了一些心得,这里一点一点地来讨论一下。

1、Tomcat调优

tomcat的默认配置对于日常练手的小项目是足够的,但是当涉及高并发时就需要我们手动调优了,因为它在默认情况下支持的多线程并发数量很难达到高并发的预期要求。

这边列举一下几个比较常用的参数:

maxThreads:最大线程数。
minSpareThreads:初始化时创建的线程数。
maxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。

keepAliveTimeOut:多少毫秒后不响应的断开keepAlive.

maxKeepAliveRequests:多少次请求后断开keepAlive失效。

1
2
3
4
5
6
server:
tomcat:
accept-count: 1000
threads:
min-spare: 100
max: 800
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.miaoshaproject.config;

import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;


//当spring容器内没有TomcatEmbeddedServletContainerFactory这个bean时,会把此bean加载到容器中
@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory> {
@Override
public void customize(ConfigurableWebServerFactory factory) {
//使用对应工厂类提供给我们的类定制化我们的tomcat connector
((TomcatServletWebServerFactory) factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();

//定制化keepalivetimeout,设置30秒内没有请求,则服务端自动断开keepalive连接
protocol.setKeepAliveTimeout(30000);
//当客户端发送超过一万个请求自动断开keepalive连接
protocol.setMaxKeepAliveRequests( );
}
});
}
}

当然,Tomcat只是中间件中的一种,其余中间件有各自的调优方法,不过我的这个项目用的是Tomcat所以着重对其描述。