nginx源码剖析笔记
01 Sep 2018
|
|
linux内核参数优化
;最大句柄数
fs.file-max = 99999
;time_wait状态的socket重新用于新的tcp链接
net.ipv4.tcp_tw_reuse = 1
;tcp发送keeptime的时间,调小可以快速清除无效连接(?单位是什么)
net.ipv4.tcp_keepalive_time = 600
;服务器主动关闭保持FIN_WAIT_2的最大时间
net.ipv4.tcp_fin_timeout = 30
;TIME_WAIT的socket最大值,上限,超过这个值会清掉所有TIME_WAIT TIME_WAIT过多会卡
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.ip_local_port_range = 1024 61000
net.ipv4.tcp_rmem = 4096 32768 262142
net.ipv4.tcp_wmem = 4096 32768 262142
;内核处理接收包队列的长度上限
net.core.netdev_max_backlog = 8096
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
;tcp syn攻击
net.ipv4.tcp_syncookies =1
;正在三次握手建立阶段的请求队列,可以调高以免丢失客户端连接
net.ipv4.tcp_max_syn.backlog = 1024
滑动窗口大小与套接字缓存设置会在一定程度上影响并发 每个tcp链接都会为了维护滑动窗口而消耗内存
命令行相关
快速退出进程
kill -s SIGTERM <pid>
kill -s SIGINT <pid>
优雅退出
kill -s SIGQUIT <master pid>
kill -s SIGWINCH <worker pid>
重读配置
kill -s SIGHUP <master pid>
日志回滚
kill -s SIGUSR1 <master pid>
还真有这么实现日志回滚的。。。我惊了
平滑升级
kill -s SIGUSR2 <master pid>
这些是对信号的handler做自定义了
性能调优
- 指定worker个数
- worker绑核 (代码层怎么实现的?)
- SSL硬件加速
- 系统调用gettimeofday执行频率 (现在开销没那么大,也可以限制)
- worker优先级 nice值设定
事件类配置型
- 是否打开accept锁 连接负载均衡锁
- 延迟时间设定
Nginx基础架构
-
通用的ngx_module_t
-
TCP_DEFER_ACCEPT以及post_accept_timeout 如果连接很久没事件就踢掉
-
ngx_cycle_t
void ****conf_ctx
所有模块配置项结构体指针(数组->指针->指针数组->指针)
讲了很多模块知识。。我对模块不太感兴趣。不看了先
ref
- 关键字 陶辉的博客。