在 Ubuntu 上的 Nginx 高并发配置实践
2023年12月15日 16:02:55 · 本文共 1,317 字阅读时间约 4分钟 · 4,833 次浏览本文将分享我个人在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
相关推荐
猜你还喜欢这些内容,不妨试试阅读一下以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。
- 前后端分离项目接口数据加密的秘钥交换逻辑(RSA、AES)
- OmniGraffle 激活/破解 密钥/密匙/Key/License
- Redis 未授权访问漏洞分析 cleanfda 脚本复现漏洞挖矿
- CleanMyMac X 破解版 [TNT] 4.6.0
- OmniPlan 激活/破解 密钥/密匙/Key/License
- 人大金仓 KingbaseES V8 R3 安装包、驱动包和 License 下载地址
- Parallels Desktop For Mac 16.0.1.48911 破解版 [TNT]
- Parallels Desktop For Mac 15.1.4.47270 破解版 [TNT]
- Sound Control 破解版 2.4.2
- 向谷歌搜索引擎主动推送网页的教程 Google Indexing API 接口实现
- 博客完全迁移上阿里云,我所使用的阿里云架构
- 微软确认Windows 10存在bug 部分电脑升级后被冻结
- 大佬们在说的AQS,到底啥是个AQS(AbstractQueuedSynchronizer)同步队列
- 比特币(BTC)钱包客户端区块链数据同步慢,区块链数据离线下载
- Java中说的CAS(compare and swap)是个啥
- 小心免费主题!那些WordPress主题后门,一招拥有管理员权限
- 强烈谴责[wamae.win]恶意反向代理我站并篡改我站网页
- 讨论下Java中的volatile和JMM(Java Memory Model)Java内存模型
- 新版个人网站 NEILREN4J 上线并开源程序源码
- 我站近期遭受到恶意不友好访问攻击公告