tomcat最大连接数取决于2个方面,服务器的资源和tomcat的配置。
服务器
- 端口号
建立一个 TCP 连接,需要将通信两端的套接字(socket)进行绑定,如下:
源 IP 地址:源端口号 <----> 目标 IP 地址:目标端口号
只要这套绑定关系构成的四元组不重复即可。
作为服务端,源ip(服务器可以存在多个IP)和源端口越多,能建立的连接也就越多。
Linux 系统对可使用的端口范围进行了限制,可以使用以下命令查看
[root]# cat /proc/sys/net/ipv4/ip_local_port_range
1024 65000
修改方法
vim /etc/sysctl.conf
#添加配置
net.ipv4.ip_local_port_range = 60000 60009
#是配置生效
sysctl -p /etc/sysctl.conf
- 文件描述符
linux系统里一切都是文件,每建立一个TCP连接,就得分配一个文件描述符,linux 对可打开的文件描述符的数量分别作了三个方面的限制。
#系统级查看
cat /proc/sys/fs/file-max
#用户级查看
cat /etc/security/limits.conf
#进程级查看
cat /proc/sys/fs/nr_open
#修改同理分为3个方面,以下为修改进程级
echo 100 > /proc/sys/fs/nr_open
- 线程
BIO模式,建立一个TCP连接就创建一个线程的方式,是最传统的多线程并发模型,早期的操作系统也只支持这种方式。
IO 多路复用的方式,简单说就是一个线程可以管理多个 TCP 连接的资源,这样你就可以用少量的线程来管理大量的 TCP 连接了。
4.内存
TCP连接本身,以及这个连接所用到的缓冲区,都是需要占用一定内存。
5.CPU
大量的tcp连接导致cpu运行率达到100%,服务器会死机。
Tomcat配置
server.xml文件中配置Connector
-
accept-count:最大等待数
当请求数达到tomcat的最大连接数,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100。如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。 -
maxConnections:最大连接数
tomcat能够接受的最大连接数。
对于Java的阻塞式BIO,默认值是maxthreads的值;对于Java 新的NIO模式,maxConnections 默认值是10000。
如果设置为-1,则禁用maxconnections功能,表示不限制tomcat容器的连接数。
maxConnections和accept-count的关系为:当连接数达到最大值maxConnections后,系统会继续接收连接,但不会超过acceptCount的值。 -
maxThreads:最大线程数
tomcat创建的最大线程数,maxThreads默认200,肯定建议增加。JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以,更多的线程异味着需要更多的内存。线程数的经验值为:1核2g内存,线程数经验值200;4核8g内存,线程数经验值800。
网友评论