zoukankan      html  css  js  c++  java
  • 日常工作中关于连接池的总结

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

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

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

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

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

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

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

  • 相关阅读:
    初解DLL基本知识
    读《暗时间》笔记
    红队 Cobalt Strike 安全加固
    《天书夜读 —— 从汇编语言到Windows内核编程》3.3 汇编反C语言练习 参考答案
    记录一次从WordPress后台到拿下主机shell的渗透
    今日记 2019.6.19
    解决Termux无法通过metasploit.sh安装Metasploit的问题
    解决ajax中文乱码问题
    jsp开发知识
    第一个Java web项目:员工管理系统
  • 原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/13228278.html
Copyright © 2011-2022 走看看