1.1 系统级最大文件描述符
理论上系统内存有多大就能打开多少的文件描述符,实际上内核会处理,一般最大打开文件数是系统内存的10%(以KB来计算),比如16G的内存,最大文件数大约是16*1000*1000*10%=1.6million, 可以通过 cat /proc/sys/fs/file-max 或者 sysctl -a | grep fs.file-max 命令查看
1.2 更改系统级限制有临时更改和永久更改两种方式:
临时更改:session断开或者系统重启后会恢复原来的设置值。使用命令 sysctl -w fs.file-max=xxxx,其中xxxx就是要设置的数字。
永久更改:vim编辑 /etc/sysctl.conf 文件,在后面添加 fs.file-max=xxxx,其中xxxx就是要设置的数字。保存退出后还要使用sysctl -p 命令使其生效。
2.Linux系统用户级的最大文件描述符
2.1 用户级最大文件描述符
同时为了控制每个进程消耗的文件资源,内核也会对单个进程最大打开文件数做默认限制,即用户级限制。32位系统默认值一般是1024,64位系统默认值一般是65535,可以使用 ulimit -n 命令查看。
2.2 更改用户级限制也有临时更改和永久更改两种方式:
临时更改:session断开或者系统重启后会恢复原来的设置值。使用命令 ulimit -SHn xxxx 命令来修改,其中xxxx就是要设置的数字。
永久更改:vim编辑 /etc/security/limits.conf 文件,修改其中的 hard nofile xxxx 和 soft nofile xxxx,其中xxxx就是要设置的数字。保存后退出。关于hard和soft的区别,参照下面参考链接中的第5个。
3. Nginx并发数
nginx官方说nginx能支撑6万多并发性能最好,那么这里我们设置nginx进程最大能打开60,000个fd,假如是4核的CPU(内存我们假设足够大32G,64G等等),我们设置worker数量为4,那么worker_connection数量为15,000。那么nginx对外能提供多少并发数呢?你以为是60,000?那么你答错了,因为nginx作为反向代理,一个用户的请求实际上占了2个fd,一个fd是用户请求,一个fd是连接后台服务的。所以一个nginx在我们这样配置参数下,可以支持30,000并发
4. tomcat并发数
4.1 acceptCount 最大连接数
默认是100。当http请求数达到tomcat的最大线程数时,还有新的http请求到来,tomcat会把请求数放到队列中。acceptCount就是最大的等待数,超过这个,tomcat会拒绝。
4.2 maxThreads最大线程数
每一个HTTP请求,tomcat都会创建一个线程来处理请求,最大线程数决定了tomcat能同时处理多少个请求。默认是200。
4.3 maxConnections最大连接数
同一时间能接受的最大连接数。
4.4 最大并发
响应时间在50ms,则每个线程1秒可以处理20个请求,tps为20*maxThreads。
5 数据库
数据库的最大连接数。SHOW GLOBAL STATUS LIKE '%max _connections%'
6 Dubbo
Dubbo的默认线程是200.
7 Redis
Redis的默认线程是10000.
8 Jedis
Jedis的maxActive是8.修改为1000.
综上所述,单个机器的默认并发200,通过配置,增加tomcat和dubbo的线程数可以达到1000并发