对于高性能网站 ,请求量大,如何支撑?
- 减少请求 对于开发人员----合并css, 背景图片, 减少mysql查询等
- 对于运维 nginx的expires ,利用浏览器缓存等,减少查询
- 利用cdn来响应请求
- 最终剩下的,不可避免的请求----服务器集群+负载均衡来支撑
所以,来到第4步后,就不要再考虑减少请求这个方向了, 而是思考如何更好的响应高并发请求。
大的认识-------既然响应是不可避免的,我们要做的是把工作内容”平均”分给每台服务器。最理想的状态 每台服务器的性能都被充分利用。
系统优化
网络
net.core.somaxconn = 4096 允许等待中的监听
net.ipv4.tcp_tw_recycle = 1 tcp连接快速回收
net.ipv4.tcp_tw_reuse = 1 tcp连接重用
net.ipv4.tcp_syncookies = 0 不抵御洪水攻击
ulimit -n 30000
防火墙(建议关掉)
net.nf_conntrack_max = 655350
net.netfilter.nf_conntrack_tcp_timeout_established = 120
文件
fs.file-max = 655360
系统最大文件描述符进程最大文件描述符 /etc/security/limits.conf
soft nofile 50000
hard nofile 50000
nginx优化
work process 打开的进程数量,为CPU核心数即可
worker_rlimit_nofile 30000; 进程打开文件的最大数量
keepalive_timeout 0; 请求完成后不保留tcp连接
php优化
生成子进程需要内核来调度,比较耗时, 如果网站并发比较大, 我们可以用静态方式一次性生成若干子进程,保持在内存中
pm = static
pm.max_children = 32
mysql优化
优化思路: 同上的nginx
1: 内核层面,加大连接数,并加快tcp回收
2: mysql层面,增大连接数
3: php层面,用长连接,节省连接数
4: 用memcached缓存,减轻mysql负担
mysql服务器内核配置
添加或修改如下选项
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 0
# syscttl -p 使修改立即生效
Comments