01月14, 2018

高性能的服务器的架设

对于高性能网站 ,请求量大,如何支撑?

  1. 减少请求 对于开发人员----合并css, 背景图片, 减少mysql查询等
  2. 对于运维 nginx的expires ,利用浏览器缓存等,减少查询
  3. 利用cdn来响应请求
  4. 最终剩下的,不可避免的请求----服务器集群+负载均衡来支撑

所以,来到第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

alt

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 使修改立即生效

本文链接:https://blog.hijs.cc/post/high-performance.html

-- EOF --

Comments