Nginx学习笔记-系统层性能优化

性能优化方法论

1、从软件层面提升硬件使用效率

2、提升硬件规格

3、超出硬件性能上限后使用 DNS(实用集群)

如何高效实用 CPU

增大 Nginx 使用CPU 的有效时长

能够使用全部CPU资源

Nginx 进程间不做无用功浪费CPU资源

不被其他进程争抢资源

设置 worker 进程数量

Syntax: worker_processes number | auto;		# auto 表示等于CPU核数
Default: worker_processes 1;
Context: main

为何一个CPU可以同时运行多个进程

宏观上并行,微观上串行

阻塞 API 引发的时间片内主动出让CPU

确保进程在运行态

减少进程间切换

使 Nginx 尽可能的处于 R 状态

尽可能的减少进程间切换

绑定 CPU

延迟处理新连接

使用 TCP_DEFER_ACCEPT 延迟处理新连接

Syntax: listen address[:port][deferred];
Deafult: listen *:80 | *:8000;
Context: server

查看上下文切换次数

什么决定 CPU 时间片的大小

image-20200510132144253

设置 worker 进程的静态优先级

Syntax: worker_priority number;		# 一般设为 -20
Default: worker_priority 0;
Contex: main

绑定 worker 到指定 CPU

Syntax: worker_cpu_affinity cpumask ...;
	    worker_cpu_affinity auto [cpumask];
Default: - ;
Contex: main

建立 TCP 连接的优化

TCP 连接过程

image-20200510142057075

SYN_SENT 状态

主动建立连接时应用层超时时间

SYN_RCVD 状态

服务端处理三次握手

image-20200510143211699

SYN 攻击

攻击者短时间内伪造不同的 ip 地址的 SYN 报文,快速占满 backlog 队列,使服务不能为正常用户服务

一切皆文件:句柄文件数的上限

两个对列的长度

listen address [:port][backlog=number];

TCP Fast Open

net.ipv4.tcp_fastopen (系统开启 TFO 功能)

listen address [:port][fastopen=number];

fastopen=number (为防止带数据的 SYN 攻击,限制最大长度,指定 TFO 连接队列的最大长度)

TCP 的 Keep-Alive 功能

应用场景

Linux 的 TCP keepalive

Nginx 的 tcp keepalive

TCP 的 time_wait 状态

主动关闭连接端的状态

TIME_WAIT 状态

TIME_WAIT 优化

使用stub_status模块监控Nginx状态

模块:ngx_http_stub_status_module ,通过 –with-http_stub_status_module启用模块

功能:通过 HTTP 接口,实时监测 nginx 的连接状态。统计数据放在共享内存中,所以统计值包含所有 worker 进程,且执行 reload 不会导致数据清零,但热升级会导致数据清零。

语法:stub_status;

stub_status 模块的监控项

Active connections: 2 
server accepts handled requests
 25 25 39 
Reading: 0 Writing: 1 Waiting: 1

 


关注微信公众账号「曹当家的」,订阅最新文章推送

Table of Contents