日常工作中经常需要处理连接池相关的工作, 连接池又分很多个, 所以需要注意的事项很多, 这里简单总结一下.
1. 最基础的操作系统层的
注意 应用服务器的操作系统还有数据库的操作系统以及nginx 或者是redis服务器上面的操作系统都需要进行对应的设置.
nofile 以及 nproc 的参数
Linux环境必须修改参数,保证进程可以打开足够的文件描述符和进程数量.
建议修改系统参数,然后重启. 方法为
vim /etc/security/limits.conf
* hard nproc 666666
* hard nofile 666666
* soft nproc 666666
* soft nofile 666666
注意修改完这个参数需要重启,建议操作系统获取之后就要立即进行处理.
TCP连接数相关的.
cat /proc/sys/net/ipv4/ip_local_port_range
查看一下端口范围,可以适当改大
方法为:
vim /etc/sysctl.conf
net.ipv4.ip_local_port_range =
2048
65000
这样单个端口至少能够实现 六万多个tcp连接
注意保存之后需要使用
sysctl -p /etc/sysctl.conf
使之生效
感觉有一个更简单的办法 Oracle 有一个preinstall的脚本 会帮忙自动进行修改 下面附上自动修改的一些参数
修改Linux TCP连接池 能够简历连接的大小参数.
vim /etc/sysctl.conf
net.core.somaxconn=32768
sysctl -p
这里面说明一下 Oracle安装时默认修改的参数
# oracle-database-preinstall-19c setting for fs.file-max is 6815744 fs.file-max = 6815744 # oracle-database-preinstall-19c setting for kernel.sem is '250 32000 100 128' kernel.sem = 250 32000 100 128 # oracle-database-preinstall-19c setting for kernel.shmmni is 4096 kernel.shmmni = 4096 # oracle-database-preinstall-19c setting for kernel.shmall is 1073741824 on x86_64 kernel.shmall = 1073741824 # oracle-database-preinstall-19c setting for kernel.shmmax is 4398046511104 on x86_64 kernel.shmmax = 4398046511104 # oracle-database-preinstall-19c setting for kernel.panic_on_oops is 1 per Orabug 19212317 kernel.panic_on_oops = 1 # oracle-database-preinstall-19c setting for net.core.rmem_default is 262144 net.core.rmem_default = 262144 # oracle-database-preinstall-19c setting for net.core.rmem_max is 4194304 net.core.rmem_max = 4194304 # oracle-database-preinstall-19c setting for net.core.wmem_default is 262144 net.core.wmem_default = 262144 # oracle-database-preinstall-19c setting for net.core.wmem_max is 1048576 net.core.wmem_max = 1048576 # oracle-database-preinstall-19c setting for net.ipv4.conf.all.rp_filter is 2 net.ipv4.conf.all.rp_filter = 2 # oracle-database-preinstall-19c setting for net.ipv4.conf.default.rp_filter is 2 net.ipv4.conf.default.rp_filter = 2 # oracle-database-preinstall-19c setting for fs.aio-max-nr is 1048576 fs.aio-max-nr = 1048576
2. 数据层的连接数限制
这里面需要注意的是 不同数据库的限制是不一样的
Oracle 主要是两个参数 一个是session 另外一个是 process 注意的是: 不建议修改的太大, 修改的太大之后 如果pga无限制 会把服务器打挂了. 建议修改命令 alter system set processes=600 scope=spfile; alter system set sessions=700 scope=spfile; 注意修改完之后需要重启数据库使之生效. 注意 要根据实际情况进行处理 不要随意设置数值. 数值务必要大于并发用户 可能小于在线用户. 建议在中间取值 根据业务系统的特点进行选取.
PG和达梦数据库分别为他们的 配置文件里面
PG的一般为 postgres.conf 达梦数据库一般为 dm.ini 文件
注意修改大小 之后需要重启数据库, 务必在上线之前处理 上线之后不要所以关停数据库,容易造成很严重的问题. 尤其不能随意杀进程.
3. springboot 的数据库连接池数据设置
以我们公司的产品为例 修改配置文件 vim /yourappath/jstack/runtime/application.yaml 在spring-datasource 的配置节下面进行修改 参数值一般为: hikari: pool-name: hikari-cp connection-test-query: SELECT 1 From DUAL^M maximum-pool-size: 50 minimum-idle: 1 注意 最大连接数和最小的空闲连接数进行设置 注意这里面的连接数有一定的讲究 如果都是短连接. 可以设置的连接池数量较小 如果都是长连接, 则必须设置较大的连接池大小, 不然会出现获取不到jdbc连接的问题
注意 springboot 公司产品的配置文件里面有两段数据库的配置文件
注意的是下面一个是用来 进行用户登录验证的 跟这个不一样.
4. springboot tomcat相关参数的设置
springboot 集成了tomcat 作为应用服务器 所以还需要在 yaml文件里面设置tomcat相关连接信息.
注意 直接增加顶级节点就可以了 不需要放到spring 的配置节下面.
tomcat:
max-threads: 1000
min-spare-threads: 200
max-spare-threads: 500
accept-count: 1000
max-connections: 20000
keep-alive-timeout: 30000
max-keep-alive-requests: 3000
5. nginx配置文件
nginx 配置文件有一个 worker_connections 1024; 的参数配置 这个里面应该只的是 没一个 nginx的work 进程能够使用的 连接数量大小. 如果是生产环境需要注意一下这里面的配置 不能过小 也需要注意一下 前面的 worker_processes 1; 参数 可以将参数值 设置为 auto 这样的话能够根据CPU自定进行设置. 理论上nginx能够使用的最大连接数 等于 worker_processes * worker_connections 但是这个数字不会大于 nofile的系统配置文件大小 也不会大于 port_range的大小. 能够处理的nginx的连接大小数目应该是这三者的 最小值.
6. redis 的简要说明
redis可以设置单独的服务器. 他的连接也需要走 TCP 连接的 注意一下他有一个bind 参数 如果是本机使用 务必设置为 bind 127.0.0.1 如果是其他服务器使用 务必 bind 0.0.0.0 但是需要注意安全性 bind 0.0.0.0 时必须设置require_pass 增加上密码 保证安全性 建议同事修改默认端口 以策安全. 注意redis的连接数目也受到操作系统的资源限制 提供性能可以从 持久化层进行概率 关闭 save 以及aof的持久化设置 使用cluster的方式提高集群 使用ssd的方式提高必须持久化时的性能 设置key过期以及淘汰机制 减少redis内存资源无限制使用. redis这一块我学习的很少 需要大拿指导.
注意所有的修改 都需要重启.
操作系统的修改需要修改操作系统
数据库的修改需要重启数据库
应用服务器的修改需要重启应用服务器
所以务必在上线使用之前进行调整.