生产环境nginx、tomcat优化

3 篇文章 0 订阅
3 篇文章 0 订阅

1 nginx

1.1 worker_processes,工作进程数
  • 1.默认:worker_processes: 1
  • 2.调大:worker_processes: CPU核心数,(双核4线程,可以设置为4),不用设置太多,设置太多容易引起502
1.2 worker_connections,单个工作进程可以允许同时建立外部连接的数量

数字越大,能同时处理的连接越多

1.默认:worker_connections: 1024
2.调大:worker_connections: 100000,(调大到10万连接)
worker_connections解析
1.connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。
2.内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,通过数学公式可以算出100000个连接数大概会占用 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占用的nginx。
3.进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,
nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;
设置ulimits:ulimit -SHn 65535

worker_processes 2; 
worker_rlimit_nofile 65535;
#pid logs/nginx.pid; 
events { 
   worker_connections 65535; 
}

通过 ps -elf | grep nginx 找到 nginx 的worker进程ID
通过 cat /proc/31613/limits 查看,其中2291是worker进程ID,请注意其中的Max open files
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hz5IFbsH-1655457160845)(nginx%E7%9A%84%E4%BC%98%E5%8C%96.assets/image-20210806090626927-16282119890331.png)]

2 tomcat(springboot)

在springboot-configuration-metadata.json文件下面,有很多属于springboot的属性,以下为tomcat的默认配置属性:

server.tomcat.accept-count:等待队列长度,默认100(队列也做缓冲池用,但也不能无限长, 不但消耗内存,而且出队入队也消耗CPU)
server.tomcat.max-connections:最大可被连接数,默认10000
server.tomcat.max-threads:最大工作线程数,默认200,线程数不是越多越好,要考虑操作系统上下文切换的开销
server.tomcat.min-spare-threads:最小工作线程数,默认10(用来解决突发的容量问题,需要有一些在工作的线程),操作系统可以有充足的时间反应,先用这10个,不够的再开启就可以

注意:

默认配置下,连接超过10000后出现拒绝连接情况
默认配置下,触发的请求超过200+100后拒绝处理
一条来自网上大佬的经验:4核8G内存单进程调度线程800-1000以上之后会花费巨大的时间在CPU调度上

示例:

server:
  tomcat:
    threads:
      max: 400
      min-spare: 100
    accept-count: 1000

3 查看nginx当前并发请求数量

[root@localhost logs]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 9
SYN_RECV 1
ESTABLISHED 2185
FIN_WAIT1 13
FIN_WAIT2 223
TIME_WAIT 294

解析:
CLOSED  //无连接是活动的或正在进行
LISTEN  //服务器在等待进入呼叫
SYN_RECV  //一个连接请求已经到达,等待确认
SYN_SENT  //应用已经开始,打开一个连接
ESTABLISHED  //正常数据传输状态/当前并发连接数  (正常数据传输状态)
FIN_WAIT1  //应用说它已经完成
FIN_WAIT2  //另一边已同意释放
ITMED_WAIT  //等待所有分组死掉
CLOSING  //两边同时尝试关闭
TIME_WAIT  //另一边已初始化一个释放  (处理完毕,等待超时结束的请求数)
LAST_ACK  //等待所有分组死掉  (正在等待处理的请求数)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值