Tomcat并发线程数修改
最近部署的tomcat应用,有一天压测的时候,测试一致反馈下载不了,结果查看日志才发现如下错误:
INFO: Maximum number of threads (200) created for connector with address null and port 8091
才惊醒这个tomcat根本就是解压就使用的,配置都没动过,肯定不能支持高并发了。
所以这里给出一个高并发的配置。
百度一下也会发现很多类似的配置文章,经本人亲测,特别是压力测试下是没问题的;
1 开始修改tomcat的server.xml文件:
<Executor name=“tomcatThreadPool” # 配置TOMCAT共享线程池,NAME为名称
namePrefix=“HTTP-8088-exec-” # 线程的名字前缀,用于标记线程名称
prestartminSpareThreads=“true” # executor启动时,是否开启最小的线程数
maxThreads=“5000” # 允许的最大线程池里的线程数量,默认是200,大的并发应该设置的高一些,这里设置可以支持到5000并发
maxQueueSize=“100” # 任务队列上限
minSpareThreads=“50”# 最小的保持活跃的线程数量,默认是25.这个要根据负载情况自行调整了。太小了就影响反应速度,太大了白白占用资源
maxIdleTime=“10000” # 超过最小活跃线程数量的线程,如果空闲时间超过这个设置后,会被关别。默认是1分钟。
/>
同时配置下Connector:
<Connector port=“8088” protocol=“org.apache.coyote.http11.Http11NioProtocol”
connectionTimeout=“5000” redirectPort=“443” proxyPort=“443” executor=“tomcatThreadPool” # 采用上面的共享线程池
URIEncoding=“UTF-8”/>
这里本人的最大线程数是5000,当然先上压测的时候并发4000是完全没压力的,当时服务器的资源20%都没用到,所以这一个配置完全足够实现5000高并发。
2 开始设置mysql最大连接数
登录mysql进行查看
Mysql –uroot –p123456
mysql> show variables like'%max_connections%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
1 row in set (0.00 sec)
很奇怪,最大连接数怎么是151呢,mysql默认的最大连接数不是100么?
后来想一下可能是版本不同的问题,默认连接数也不同。为了确认mysql5.5.3默认的最大连接数为151,去mysql官网查看了一下:mysql默认的最大连接数为151,上限为1000
2.修改mysql默认的最大连接数为1000
在/etc/my.cnf文件中( 需要重启mysql服务)
[mysqld]部分增加
max_connections=1000
mysql其他版本默认的最大连接数
Mysql5.5、mysql5.6、mysql5.7:默认的最大连接数都是151,上限为:100000
修改mysql数据库默认的最大连接数
方法一
修改mysql的主配置文件/etc/my.cnf
[mysqld]部分添加
“max_connections=1000(这个根据实际的需要来进行设置即可)”,
重启MySQL服务
方法二
mysql客户端登录,通过命令行修改全局变量来进行修改
mysql -uroot -p123456
mysql> set global_max_connections = 200;
mysql> show processlist;
mysql> show status;
修改完成后进行查看,mysql的最大连接数
mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set (0.00 sec)
这种方法重启mysql后会失效
方法三
解开mysql源代码,进入里面的SQL目录修改mysqld.cc找到下面一行:
{"max_connections", OPT_MAX_CONNECTIONS,
"The number of simultaneous clients allowed.", (gptr*) &max_connections,
(gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,
0},
把它改为:
{"max_connections", OPT_MAX_CONNECTIONS,
"The number of simultaneous clients allowed.", (gptr*) &max_connections,
(gptr*) &max_connections, 0, GET_ULONG, REQUIRED_ARG, 1500, 1, 16384, 0, 1,
0},
保存退出,然后./configure ;make;make install可以获得同样的效果
方法四
通过修改mysqld_safe来修改mysql的连接数
编辑 mysqld_safe配置文件,找到如下内容:
then $NOHUP_NICENESS $ledir/$MYSQLD
$defaults --basedir=$MY_BASEDIR_VERSION
--datadir=$DATADIR $USER_OPTION
--pid-file=$pid_file
--skip-external-locking
-O max_connections=1500
>> $err_log 2>&1 else
eval "$NOHUP_NICENESS $ledir/$MYSQLD
$defaults --basedir=$MY_BASEDIR_VERSION
--datadir=$DATADIR $USER_OPTION
--pid-file=$pid_file
--skip-external-locking $args
-O max_connections=1500 >>
$err_log 2>&1"
方法三、方法四未试验过,一二不好使再考虑三四。
注: my.cnf配置文件在哪?
my.cnf配置文件在linux上是位于路径“/etc/my.cnf”下,在window上则位于安装目录的根目录下;可以使用命令“mysql --help”查看关于MYSQL对应配置文件“my.cnf”搜索顺序。
一般linux上都放在 /etc/my.cnf ,window 上安装都是默认可能按照上面的路径还是没找到, window 上 可以登录到mysql中 使用 show variables like ‘%data%’ 先找到data 存放路径, 一般my.ini 在 data文件的上一级。
win下的是my.ini,一般会在安装目录的根目录。