最近遇到单体架构tomcat的项目遇到高并发出现阻塞的情况,考虑方向如上:

1.Docker安装:

centos 下载docker:

yum -y install docker-io 

启动容器:

service docker restart 

2.Mysql安装:

docker pull mysql

docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql 

使用navicat连接出现1521错误:

docker+msyql+ssm+durid+ngix+tomcat处理并发_高并发

解决办法如下:

使用 docker exec 进入容器:

docker exec -it mysql容器id /bin/bash 

设置root用户开启远程连接: 

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

set GLOBAL max_connections=200 ;#自己想设置的链接个数

3.安装tomcat和nginx 参考:​

4.将ssm项目打成war放到tomcat下webapps下

5.安装ab测试工具:

yum -y install httpd-tools 

ab -v 查看ab版本 

ab –help

使用:ab -n 2000 -c 2000 -p test.json -T 'application/json'   'http://120.78.140.3:8080/signs/Sign' 查看并发情况

docker+msyql+ssm+durid+ngix+tomcat处理并发_nginx_02

打开druid监控页面:

docker+msyql+ssm+durid+ngix+tomcat处理并发_nginx_03

6.tomcat开启arp模式:

***tomcat 以arp模式运行:

docker+msyql+ssm+durid+ngix+tomcat处理并发_高并发_04

tomcat apr模式安装:

docker+msyql+ssm+durid+ngix+tomcat处理并发_docker_05

tomcat-native 安装文件已经存在于 tomcat 中,位于 ​​$CATALINA_HOME/bin​​​ 的文件 ​​tomcat-native.tar.gz​​​。 将文件 ​​tomcat-native.tar.gz ​​拷贝出来后解压,配置,安装。

./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/lib/jvm/jdk1.8.0_161  && make && make install

在catalina.sh添加:

JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"

修改server.xml

docker+msyql+ssm+durid+ngix+tomcat处理并发_高并发_06

启动tomcat:出现如下字样则表示apr模式启动成功:

docker+msyql+ssm+durid+ngix+tomcat处理并发_nginx_07


7.负载均衡:

docker+msyql+ssm+durid+ngix+tomcat处理并发_docker_08


# 使用默认策略,轮询

upstream ydzwV3{

    # 下面介绍几种负载均衡策略,其中轮询、weight、ip_hash是nginx内置的,可以直接使用。fair和url_hash需要第三方支持才可以使用。

    # 1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    server localhost:8080;

    server localhost:9090;


    # 2、weight:指定权重,按照权重进行请求的分配。wight和访问比例成正比,适合后端服务器性能不均的情况。

    # 下面的配置就会经常访问8080的服务。如果后端服务器8080down掉,能够立刻切换到9090。

    # server localhost:8080weight=10;

    # server localhost:9090weight=1;


    # 3、ip_hash:每个请求按照ip的hash结果进行分配,这样的话每个访客固定请求一个后端服务器,可以解决session没共享的问题。

    # 如果8080down掉,则依然可以访问,可能会缓存9090。如果8288启动,则会从9090切换到8080。

    # ip_hash; 

    # server localhost:8080;

    # server localhost:9090;


    # 4、fair(第三方):后端服务器响应时间短的优先分配。

    # fair; 

    # server localhost:8080;

    # server localhost:9090;


    # 5、url_hash(第三方):按访问的url的hash结果来分配请求,这样相同url会分配到相同的后端服务器。适合后端服务器有缓存的情况。

    # hash $request_uri; 

    # hash_method crc32; 

    # server localhost:8080;

    # server localhost:9090;


}