处理过程
- 浏览器发送请求经过网络到达web服务器
- web服务器处理请求并响应数据
- 响应数据从web服务器发送到用户端
- 用户浏览器接收数据,本地计算渲染
指标
- 响应时间
- 吞吐量
响应时间
- 响应时间 = 发送时间 + 传输时间 + 处理时间
- 发送时间 = 数据量比特数 / 带宽
- 传输时间 = 传播距离 / 传播速度
缩短处理时间
- 单机性能优化
- 集群
- 缓存
- 瓶颈点优化
- 多机房部署,就近访问
单机架构
- 单机模式
- 单台服务器web+DB
- 数据库每日凌晨备份,保存到本地
- 动静分离
- 单台服务器web+DB
- Nginx+PHP实现动静分离
- 数据库每日凌晨备份,保存到本地
- 数据库分离
- 将web服务器和数据库单独部署
- web服务器资源备份到数据库服务器
- 数据库每日凌晨备份存放到web服务器
- 组件分离
- 静态服务器使用单独的服务器
- 静态服务器使用独立一级域名防止Cookie提交
- 静态服务器使用多个二级域名提高加载速度(下载网页数据,每遇到1个图片,浏览器会开启1个线程去下载,每个域名只能开6-8个线程)
- 静态资源作为NFS,静态资源存放于NFS上
- 数据库每日凌晨备份到NFS上
web性能优化
- CPU
- 进程数
- CPU绑定
- 内存
- JVM设置
- GC优化
- 大页内存
- 内存合并
- 磁盘
- Openfile
- Sendfile
- IO调度算法
- 网络
- Epool
- Socket优化
- 持久连接
- 随机端口限制
- 65536(2^16-1)
- nc -l -4 -p 9999 -k
- nc 192.168.174.111 9999
-
- TCP状态转换:FIN_WAIT2,TIME_WAIT(主动关闭方,1个60s,消耗socket)
-
- TIME_WAIT优化
- reuse:都可以开,时间戳(timestamps)要开
- recycle:不等60s,快速销毁TIME_WAIT,当客户端出于NAT网络时,不能打开(网关 / 负载均衡器,多个客户端通过一个IP访问外网)
- 绑定多个ip地址
- TIME_WAIT优化
- 性能测试
- ab -n 10000 -c -1000 http://www.baidu.com/
- 以1000个并发,共10000个请求访问百度
- 报错:too many open file(默认1024)
- 1个http请求对应1个tcp,对应1个socket文件
- ulimit -a
参考
运维知识体系
https://www.unixhot.com/page/ops
TCP的随机端口为什么不能像服务端口一样复用?