努力工作的时候,也不要忘记放松一下哦

编程开发

在 Ubuntu 上的 Nginx 高并发配置实践

2023年12月15日 16:02:55 · 本文共 1,317 字阅读时间约 4分钟 · 4,899 次浏览
在 Ubuntu 上的 Nginx 高并发配置实践

本文将分享我个人在2核2G的 Ubuntu 上对 Nginx 的高并发配置,在其他 Linux 系统上可能不一样,仅供参考。

性能说明

由于我这是个人的2核2G小机器,磁盘也很小,请求量过大所以我没有看访问access.log日志,无法计算出QPS/TPS等指标,并且正在对外提供服务,我没有做压测,并不知道极限在哪里,所以我只能给出目前正常对外服务时的一些情况:

  • 请求量:平均每秒1368次请求;每分钟8万次请求;每小时492万次请求;每天1亿次请求;每月34亿次请求
  • 并发量:3千左右(netstat -apn|grep nginx|wc -l)
  • CPU:在50%~60%
  • HTTPS:未开启,开启SSL以后CPU会爆满

为啥请求量每秒1千3,但并发量3千?因为我Nginx后面还有业务服务啊,后面的业务需要时间处理,如果每秒处理不了1千3,nginx 这里就需要维护连接等待我后面的业务响应,并发数就大于每秒请求数了。

网站请求量请求并发量

环境说明

  • 硬件:共享云主机 2核心 AMD EPYC,2G 内存,4G SWAP
  • 系统:Ubuntu 22.04.3 LTS
  • 软件:Nginx 1.18.0
  • SSL:关闭,由 CDN 提供 HTTPS 证书加密,回源使用 HTTP 协议

操作系统配置

在 Linux 中一切皆文件,我们的 tcp 连接也会用文件来表示,所以我们需要先调整 Linux 操作系统的配置,因为 Linux 会限制一个进程最大文件打开数。

文件打开数

编辑 /etc/security/limits.conf 文件,每一行描述一个用户配置,在后面新增:

www-data soft nofile 1048576
www-data hard nofile 1048576

我给 nginx 分配的执行用户是 www-data,请根据你的实际情况编写配置。

这个配置的意思是将软限制和硬限制都设置到 9999999。

编辑 /etc/systemd/system.conf 文件,有则修改,无则添加 DefaultLimitNOFILE:

DefaultLimitNOFILE=65535:524288

编辑 /etc/sysctl.conf 文件,添加 fs.file-max:

fs.file-max = 1048576
vm.max_map_count = 1048576

编辑 /etc/default/nginx 文件,添加 ULIMIT:

ULIMIT="-n 1048576"

编辑 /proc/sys/vm/max_map_count 文件内容:1048576,调整连接跟踪模块的最大连接数,可以直接执行命令:

echo 1048576 > /proc/sys/vm/max_map_count

Nginx 配置

编辑 nginx 的配置文件,我的是在 /etc/nginx/nginx.conf,主要有以下改动:

  • worker_processes 2; #按照CPU线程数填
  • worker_rlimit_nofile 65535; #最大打开文件数
  • events 中 worker_connections 65535; #每个线程服务多少个客户端
  • events 中 multi_accept on; #让每个进程接受多个连接。
  • events 中 use epoll; #较新 Linux 版本的首选连接方法,连接复用?

合并起来,如下配置:

user www-data;
worker_processes 1;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}

http 节点中的配置,就需要根据你实际的后端服务去调整了,比如请求头,请求体的相关大小,我就不做展示了。

查看配置生效情况

内核参数的调整可能需要重启,建议重启,不能重启时,执行命令:

sysctl -p

执行 ulimit -n 查看当前配置的文件打开数,然后先通过 ps 命令寻找 nginx 的进程编号,我这里是 601,然后打印进程的限制:

cat  /proc/601/limits

看下 Max open files 的限制是不是已经变了。

最大打开文件量
商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.renfei.net/posts/1626402130325676115
评论与留言

以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。

微信搜一搜:任霏博客