第三章 2.性能压测,容量问题

1.查看进程使用情况

ps -ef | grep java   ----查看进程号,30589

netstat -anp | grep 30589---查看该进程的使用情况

pstree -p 30589 | wc -l    ----查看线程数

top -H  -----查看CPU使用情况

[root@iZbp1dtm752cu7uoi7cj5fZ ~]# top -H

top - 21:24:17 up 4 days, 1:57, 2 users, load average: 0.00, 0.01, 0.05
Threads: 152 total, 1 running, 151 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1882084 total, 66580 free, 521380 used, 1294124 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1184892 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 51620 3892 2616 S 0.3 0.2 0:37.90 systemd
14012 mysql 20 0 1186092 91228 9156 S 0.3 4.8 0:23.60 mysqld
30598 root 20 0 2461020 365748 13416 S 0.3 19.4 0:49.64 java

2.修改tomcat默认配置

/META-INF/spring-configuration-metadata.json 文件中

server.tomcat.accept-count:100  等待队列长度

server.tomcat.max-connections:10000 最大可被连接数

server.tomcat.max-threads:200  最大工作线程数

server.tomcat.min-spare-threads:10 最小工作线程数

默认配置下,连接超过10000拒绝连接

默认配置下,触发请求超过200+100后拒绝处理

4G 8核最佳配置为 server.tomcat.max-threads=800,server.tomcat.min-spare-threads=100

修改完后,重启,发现线程数量上升了,之前32

[root@iZbp1dtm752cu7uoi7cj5fZ ~]# pstree -p 4203 | wc -l
115

3.定制化内嵌tomcat配置

有些配置没有提供给application.properties配置,需要使用WebServerFactoryCustomizer<ConfigurableWebServerFactory>来定制化配置

@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory>{

    @Override
    public void customize(ConfigurableWebServerFactory factory) {
        // 使用工厂类提供的接口定制我们的tomcat connector server.context.xml文件中配置
        // TODO Auto-generated method stub
        ((TomcatServletWebServerFactory)factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
            
            @Override
            public void customize(Connector connector) {
                Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler();
                // 定制化KeepAliveTimeout,30秒内没有请求则服务自动断开KeepAlive连接
                protocol.setKeepAliveTimeout(30000);
                // 当客户端发送超过10000个请求后断开KeepAlive连接
                protocol.setMaxKeepAliveRequests(10000);
                
            }
        });
    }
    
}
原文地址:https://www.cnblogs.com/t96fxi/p/11964253.html