1. 简谈
之前长时间在外包开发岗位,很少接触高并发环境下中间件的配置优化,导致独立进入公司,成为高级开发兼顾一部分架构职责的时候有些摸不着头脑,最近搜集了一下linux系统、各类中间件的配置优化,虽然并不是太严谨,但聊胜于无。
2.优化配置
1. linux句柄数
句柄数这东西我也说不清楚,一个连接一个句柄还是什么来着,详细的百度吧,总之默认1024,平常测试没问题
但高并发下明显不够用,需要酌情设置。
不够情况下会有too many open flies 错误
查看句柄数:
ulimit -a 列表中 open files 为最大句柄数
修改句柄数
ulimit -u 数量
一般线上根据机器来,linux最大6万多来着,好像是65535来着,windows的数量也差不多,只比linux低一点。
买的云服务器,比如阿里云,linux系统的最大句柄数已经开到最大了,所以一般不用调,可以用命令看一下。
2. nginx最大连接数
对应的nginx.conf配置文件偏上放的一个参数
events {
worker_connections 1024;
}
默认都是1024,改掉重启就好,一般也要改到6万多吧,看具体情况。
3. tomcat最大并发数
springboot配置文件中增加
server:
tomcat:
max-threads:
ssm直接在tomact的配置文件中配置端口的同一行中加上
maxThreads =
具体调多大,看服务器配置了,我自己电脑调到一万,撑死了也才300多,配置太低了
其他还有超时时间,最大等待并发数等等,具体都可以参考服务配置填写
现在undertow据说性能比tomcat高三分之一,我测过的确高不少,替换掉也简单,但配置应该大同小异
tomcat示例:
tomcat:
uri-encoding: UTF-8
max-threads: 1000
accept-count: 500
max-connections: 2000
min-spare-threads: 300
undertow示例:
undertow:
worker-threads: 256
io-threads: 8
buffer-size: 1024
direct-buffers: true
4. redis参数
spring:
redis:
jedis:
pool:
max-active: 1024 #最大连接数
max-idle: 200 #最大空闲连接数
redis性能很高 这两个配置这样写 高性能服务器吞吐十万大概没什么问题
5. mysql最大连接数
在项目配置文件中加大mysql的连接数,而mysql本身用默认配置,高并发下就会报错,因为默认只有几百的连接数
Error: Too many connections
如果想避免 就要在数据库配置文件mysqld下加入
max_connections = 2000 #最大连接数
max_user_connections = 1000 #最大用户连接数
wait_timeout = 1000 #超时时间
这个配置也是要参考用户量和服务器配置的,改这么大,小公司一般够用了,不够再加。
3. 总结
总的来说,所谓调优都是把最大连接数调节到合适数量,其他的等待连接数,超时时间等等参数都应该跟随最大连接数进行调节,具体多少,要看根据压力测试对系统和服务器进行测试得出的数据来判断了。
4. 事后测试
最近又测试过一波,这里临时加上,undertow的配置似乎加不加无所谓,各项都自动优化的不错,顶多worker-threads加大点,当然还是看cpu的性能,否则加再大也没什么用。
tomcat默认配置和我加上的优化配置差距明显,因为他默认150个最大并发数,实在是太小了,我用的我的示例配置,吞吐量明显提升,而且无异常。