各类连接数性能优化

1、Tomcat并发优化

打开tomcat安装目录\conf\server.xml文件,配置Connector,定位到这一行:
在server.xml中 有以下配置:

<Connector port="8080" protocol="HTTP/1.1" 
maxThreads="1000"
acceptCount="1500" 
connectionTimeout="20000"
redirectPort="8443" />

参数说明:

maxThreads 客户请求最大线程数
minSpareThreads Tomcat初始化时创建的 socket 线程数
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads )
connectionTimeout 连接超时
minProcessors 服务器创建时的最小处理线程数
maxProcessors 服务器同时最大处理线程数
URIEncoding URL统一编码

2、数据库连接池

方法一: 在Tomcat的conf/context.xml中配置
在Tomcat\apache-tomcat-6.0.33\conf目录下的context.xml文件中配置默认值如下:

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

配置连接池:

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <!--配置oracle数据库的连接池-->
    <Resource name="jdbc/oracleds"
        author="Container"
        type="javax.sql.DataSource"
        maxActive="100"
        maxIdle="30"
        maxWait="10000"
        username="scott"
        password="tiger"
        driverClassName="oracle.jdbc.dirver.OracleDriver"
        url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" />
    <!--配置mysql数据库的连接池—>
<Resource name="jdbc/mysqlds" 
        auth="Container" 
        type="javax.sql.DataSource" 
        username="root" 
        password="root" 
        maxIdle="30" 
        maxWait="10000" 
        maxActive="100"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/db_blog" />

备注:配置mysql数据库的连接池, 需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下 。

配置好后需要注意的两个步骤
1.将对应数据库的驱动类放到tomcat的lib目录下
2.重新启动tomcat服务器,让配置生效
在web应用程序的web.xml中设置数据源参考,如下:
在节点中加入下面内容

<resource-ref>
      <description>mysql数据库连接池</description>
      <!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/mysqlds"一致 -->
      <res-ref-name>jdbc/mysqlds</res-ref-name>
      <!-- 资源类型 -->
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

参数含义:
maxIdle 连接池中最多可空闲maxIdle个连接
minIdle 连接池中最少空闲maxIdle个连接
initialSize 初始化连接数目
maxWait 连接池中连接用完时,新的请求等待时间,毫秒
username 数据库用户名
password 数据库密码

3、HttpClient连接池

由程序自定义,注意:每个路由的最大连接数指到同一个主机(IP)的连接数,当被测内容为同一个IP时,最大连接数和每个路由的最大连接数建议相同

//连接管理器,使用无惨构造 
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
//最大连接数 
connManager.setMaxTotal(200); 
//默认的每个路由的最大连接数 
connManager.setDefaultMaxPerRoute(100); 
//设置到某个路由的最大连接数,会覆盖defaultMaxPerRoute 
connManager.setMaxPerRoute(new HttpRoute(new HttpHost("somehost", 80)), 150);

4、Redis连接池

由程序自定义

public static void main(String[] args) {
//首先如果想使用Jedis连接池,则必须有一个类可以保存所有连接池相关的属性的配置项
JedisPoolConfig poolConfig=new JedisPoolConfig();
poolConfig.setMaxTotal(1000);//设置最大连接数
poolConfig.setMaxIdle(200); //设置空闲的连接数
poolConfig.setMaxWaitMillis(1000); //设置最大的等待时间

标题5、数据库连接数

方式一:修改MySQL最大连接数
/etc/my.cnf文件,max_connections=1000,重启MySQL数据库
方式二:修改Oracle的processes和sessions值

SQL> alter system set processes=300 scope=spfile;
SQL> alter system set sessions=335 scope=spfile;

重启oracle服务器才能生效
ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关,它们的关系如下:
sessions=(1.1*process+5)

6、Redis连接数

redis.conf文件
maxclients 20000
#2.6之后版本,可以修改最大连接数配置,默认10000

7、SpringBoot项目集成配置连接池

使用SpringBoot部署的项目,可在application.yaml配置文件中实现对线程池、数据库连接池、redis连接池、HttpClient连接池等进行集成配置
在这里插入图片描述

8、Nginx连接数

nginx/nginx.conf文件

worker_processes 1; #nginx 进程数,建议为CPU核数
worker_rlimit_nofile 65535; #一个nginx 进程打开的最多文件,可与ulimit -n一致,65535
worker_connections 1024; #每个进程允许的最大连接数
keepalive_timeout60; #长连接超时时间。

9、操作系统最大文件打开数

/etc/security/limits.conf

soft nofile 65536 # open files (-n)
hard nofile 65536
soft nproc 65565 hard nproc 65565 # max user processes (-u)

10、TCP端口数量

高并发下可能会出现TCP端口数量不够用的情况,最高为65535,可以通过调整内核参数可以解决这个问题
/etc/sysctl.conf

net.ipv4.tcp_syncookies=1 # 开启SYN Cookies。当出现SYN等待队列溢出时,启用cookie来处理,可防范少量的SYN攻击
net.ipv4.tcp_tw_recycle=1 # 开启TCP连接中TIME-WAIT套接字的快速回收
net.ipv4.tcp_tw_reuse=1 # 开启重用。允许将TIME-WAIT套接字重新用于新的TCP连接
net.ipv4.tcp_timestamps=1 # 减少time_wait
net.ipv4.tcp_tw_timeout=3 # 收缩TIME_WAIT状态socket的

回收时间窗口
然后运行sysctl -p命令使配置生效

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值