最大连接数和最大线程数相关知识点的总结
只要是有数据读写的应用都有一个最大连接数和最大线程的配置,配置合理的最大连接数和线程数,可以有效防止应用崩溃一. tomcat:tomcat是目前较为常用的Web容器,良好的配置能使用tomcat服务效率更高,今天我主要解释一下tomcat的最大线程数(maxThreads)、最大等待数(acceptCount)和最大连接数(maxConnections),连接超时(conne...
·
只要是有数据读写的应用都有一个最大连接数和最大线程的配置,配置合理的最大连接数和线程数,可以有效防止应用崩溃
一. tomcat:
tomcat是目前较为常用的Web容器,良好的配置能使用tomcat服务效率更高,
今天我主要解释一下tomcat的最大线程数(maxThreads)、
最大等待数(acceptCount)和最大连接数(maxConnections),连接超时(connectionTimeout)。
1)maxThreads(最大线程数):每一次HTTP请求到达Web服务,
tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务可以同时处理多少个请求,默认200.
2)accepCount(最大等待数):当调用Web服务的HTTP请求数达到tomcat的最大线程数时,
还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,
这个acceptCount就是指能够接受的最大等待数,
默认100.如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。
3)maxConnections(最大连接数):这个参数是指在同一时间,tomcat能够接受的最大连接数。
一般这个值要大于maxThreads和acceptCount的和。
4)connectionTimeout(连接超时) : 一个socket创建连接后,如何一直没有收到服务器返回数据,
将在此时间后将此连接释放. 默认值为60000毫秒
二.nginx:
在Nginx运行的时候,会启动两种进程,
一种是主进程master process;一种是工作进程worker process。
worker_processes:配置文件中将worker_processes设置为4,启动Nginx后,
使用进程查看命令观察名字叫做nginx的进程信息,以看到1个nginx主进程,
master process;还有四个工作进程,worker process。
主进程负责监控端口,协调工作进程的工作状态,分配工作任务,
工作进程负责进行任务处理。一般这个参数要和操作系统的CPU内核数成倍数。
worker_connections:这个属性是指单个工作进程可以允许同时建立外部连接的数量。
无论这个连接是外部主动建立的,还是内部建立的。这里需要注意的是,一个工作进程建立一个连接后,
进程将打开一个文件副本。所以这个数量还受操作系统设定的,进程最大可打开的文件数有关。
linux要求每个进程最大能同时打开1024的文件,但是可以修改
三. redis:
redis通过监听一个TCP端口或socket的方式接收来自客户端的连接,当与客户端建立连接后,redis内部会进行如下操作:(1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模型;(2)然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法;(3)然后创建一个可读的文件事件用于监听这个客户端socket的数据发送。
修改方式:
1. 修改配置文件:2.6之后版本,可以修改最大连接数配置,默认10000,
可以在redis.conf配置文件中修改# maxclients 10000
2. 启动时 redis-server --maxclients 100000 -f /etc/redis.conf
查看命令:
127.0.0.1:6379> CONFIG GET maxclients
"maxclients"
"10000"
四. mysql:
mysql是最流行的数据库之一,它的优化涉及多个方面,这次只说最大连接数和最大线程数
1. mysql的(max_connections)最大连接数默认是100, 最大可以达到16384
2. innodb_thread_concurrency:支持的最大并发执行的线程数
常用的几个命令:
查看服务器的连接次数
show status like 'Connections';
查看曾经的最大连接数
show status like 'Max_used_connections';
查看当前连接的线程数
show status like 'Threads_connected';
查看当前正在运行的线程数
show status like 'threads_running';
查看线程缓存中的线程数
show status like 'threads_cached';
五. mongdb:
最大连接数默认值为50;启动里边加参数 --maxConns=20000或者在 /etc/mongod.cnf (我自己见的配置文件添加 maxConns=20000)
其它常用的配置项:
#对mongo实例来说,每个host允许链接的最大链接数,这些链接空闲时会放入池中,如果链接被耗尽,任何请求链接的操作会被阻塞等待链接可用,推荐配置10
connectionsPerHost=10
#当链接空闲时,空闲线程池中最大链接数
minPoolsSize=5
#此参数跟connectionsPerHost的乘机为一个线程变为可用的最大阻塞数,超过此乘机数之后的所有线程将及时获取一个异常.eg.connectionsPerHost=10 and threadsAllowedToBlockForConnectionMultiplier=5,最多50个线程等级一个链接,推荐配置为5
threadsAllowedToBlockForConnectionMultiplier=5
#一个线程等待链接可用的最大等待毫秒数,0表示不等待,负数表示等待时间不确定,推荐配置120000
maxWaitTime=120000
#链接超时的毫秒数,0表示不超时,此参数只用在新建一个新链接时,推荐配置10,000.
connectTimeout=10000
#此参数表示socket I/O读写超时时间,推荐为不超时,即 0 Socket.setSoTimeout(int)
socketTimeout=0
#该标志用于控制socket保持活动的功能,通过防火墙保持连接活着
socketKeepAlive=false
#true:假如链接不能建立时,驱动将重试相同的server,有最大的重试次数,默认为15次,这样可以避免一些server因为一些阻塞操作零时down而驱动抛出异常,这个对平滑过度到一个新的master,也是很有用的,注意:当集群为复制集时,驱动将在这段时间里,尝试链接到旧的master上,而不会马上链接到新master上
#false 当在进行socket读写时,不会阻止异常抛出,驱动已经有自动重建破坏链接和重试读操作. 推荐配置false
autoConnectRetry=false
#重新打开链接到相同server的最大毫秒数,推荐配置为0,如果 autoConnectRetry=true,表示时间为15s
#com.jd.mongodbclient2.mongo.JDClientMongo.maxAutoConnectRetryTime=false
#表示当没有手动关闭游标时,是否有一个自动释放游标对象的方法,如果你总是很小心的关闭游标,则可以将其设为false 推荐配置true
#com.jd.mongodbclient2.mongo.JDClientMongo.cursorFinalizerEnabled=true
#安全模式
com.jd.mongodbclient2.driver.MongoDBDriver.safe=true
#为true表示读写分离
com.jd.mongodbclient2.driver.MongoDBDriver.slaveOk=false
六. rabbitmq:
修改RabbitMQ最大连接数.编辑/usr/lib/systemd/system/rabbitmq-server.service,在[Service]字段添加一行LimitNOFILE=65535:
rabbitmqctl命令可以查看配置信息:
xpfirst$rabbitmqctl status
Status of node 'rabbit@10-101-17-13' ...
[{pid,23658},
......
{file_descriptors,
[{total_limit,924},
{total_used,10},
{sockets_limit,829},
{sockets_used,10}]},
......
]
...done.
更多推荐
已为社区贡献1条内容
所有评论(0)