日常工作中关于连接池的总结

日常工作中经常需要处理连接池相关的工作, 连接池又分很多个, 所以需要注意的事项很多, 这里简单总结一下.

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这一块我学习的很少 需要大拿指导. 

注意所有的修改 都需要重启. 

操作系统的修改需要修改操作系统

数据库的修改需要重启数据库

应用服务器的修改需要重启应用服务器

所以务必在上线使用之前进行调整. 

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/13228278.html