很多时候,我没都会问一个问题,那些高流量的站点是如何做到有那么多的流量的?他们配置后又是如何优化的呢?那么今天汇仁智杰的程序大师就和大家说说我们该如何优化。
  1. 将TCP切换为UNIX域套接字
  UNIX域套接字相比TCP套接字在loopback接口上能提供更好的性能(更少的数据拷贝和上下文切换)。
  但有一点需要牢记:仅运行在同一台服务器上的程序可以访问UNIX域套接字(显然没有网络支持)。
  upstream backend
  {
      # UNIX domain sockets
      server unix:/var/run/fastcgi.sock;
      # TCP sockets
      # server 127.0.0.1:8080;
  }
  2. 调整工作进程数
  现代计算机硬件是多处理器的,NGINX可以利用多物理或虚拟处理器。
  多数情况下,你的Web服务器都不会配置为处理多种任务(比如作为Web服务器提供服务的同时也是一个打印服务器),你可以配置NGINX使用所有可用的处理器,NGINX工作进程并不是多线程的。
  运行以下命令可以获知你的机器有多少个处理器:
  Linux上 -
  cat /proc/cpuinfo | grep processor
  FreeBSD上 -
  sysctl dev .cpu | grep location
  将nginx.conf文件中work_processes的值设置为机器的处理器核数。
  同时,增大worker_connections(每个处理器核心可以处理多少个连接)的值,以及将"multi_accept"设置为ON,如果你使用的是Linux,则也使用"epoll":
  # We have 16 cores
  worker_processes 16;
  # connections per worker
  events
  {
   worker_connections 4096;
   multi_accept on;
  }
  3. 设置upstream负载均衡
  以我们的经验来看,同一台机器上多个upstream后端相比单个upstream后端能够带来更高的吞吐量。
  例如,如果你想支持最大1000个PHP-fpm子进程(children),可以将该数字平均分配到两个upstream后端,各自处理500个PHP-fpm子进程:
  upstream backend {
   server unix:/var/run/php5-fpm.sock1 weight=100 max_fails=5 fail_timeout=5;
   server unix:/var/run/php5-fpm.sock2 weight=100 max_fails=5 fail_timeout=5;
  }
  4. 禁用访问日志文件
  这一点影响较大,因为高流量站点上的日志文件涉及大量必须在所有线程之间同步的IO操作。
  access_log off;
  log_not_found off;
  error_log /var/log/nginx-error.log warn;
  若你不能关闭访问日志文件,至少应该使用缓冲:
  access_log /var/log/nginx/access.log main buffer=16k;
  5. 启用GZip
  gzip on;
  gzip_disable "msie6";
  gzip_vary on;
  gzip_proxied any;
  gzip_comp_level 6;
  gzip_min_length 1100;
  gzip_buffers 16 8k;
  gzip_http_version 1.1;
  gzip_types text/plain text/css application/json application/x-javascript text/xml   application/xml application/xml+rss text/javascript;
  6. 缓存被频繁访问的文件相关的信息
  open_file_cache max=200000 inactive=20s;
  open_file_cache_valid 30s;
  open_file_cache_min_uses 2;
  open_file_cache_errors on;
  7. 调整客户端超时时间
  client_max_body_size 500M;
  client_body_buffer_size 1m;
  client_body_timeout 15;
  client_header_timeout 15;
  keepalive_timeout 2 2;
  send_timeout 15;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  8. 调整输出缓冲区大小
  fastcgi_buffers 256 16k;
  fastcgi_buffer_size 128k;
  fastcgi_connect_timeout 3s;
  fastcgi_send_timeout 120s;
  fastcgi_read_timeout 120s;
  reset_timedout_connection on;
  server_names_hash_bucket_size 100;
  9. /etc/sysctl.conf调优
  # Recycle Zombie connections
  net.inet.tcp.fast_finwait2_recycle=1
  net.inet.tcp.maxtcptw=200000
  # Increase number of files
  kern.maxfiles=65535
  kern.maxfilesperproc=16384
  # Increase page share factor per process
  vm.pmap.pv_entry_max=54272521
  vm.pmap.shpgperproc=20000
  # Increase number of connections
  vfs.vmiodirenable=1
  kern.ipc.somaxconn=3240000
  net.inet.tcp.rfc1323=1
  net.inet.tcp.delayed_ack=0
  net.inet.tcp.restrict_rst=1
  kern.ipc.maxsockbuf=2097152
  kern.ipc.shmmax=268435456
  # Host cache
  net.inet.tcp.hostcache.hashsize=4096
  net.inet.tcp.hostcache.cachelimit=131072
  net.inet.tcp.hostcache.bucketlimit=120
  # Increase number of ports
  net.inet.ip.portrange.first=2000
  net.inet.ip.portrange.last=100000
  net.inet.ip.portrange.hifirst=2000
  net.inet.ip.portrange.hilast=100000
  kern.ipc.semvmx=131068
  # Disable Ping-flood attacks
  net.inet.tcp.msl=2000
  net.inet.icmp.bmcastecho=1
  net.inet.icmp.icmplim=1
  net.inet.tcp.blackhole=2
  net.inet.udp.blackhole=1
  10. 监控
  持续监控打开连接的数目,空闲内存以及等待状态线程的数目。
  设置警报在超出阈值时通知你。你可以自己构建这些警报,或者使用类似ServerDensity的东西。
  确认安装了NGINX的stub_status模块。该模块默认并不会编译进NGINX,所以可能你需要重新编译NGINX -
  ./configure --with-http_ssl_module --with-http_stub_status_module --without-  mail_pop3_module
  --without-mail_imap_module --without-mail_smtp_module
  make install BATCH=yes
  以上呢!就是汇仁智杰小编和大家说的,希望对你有所帮助,今天的内容就分享这些啦。
免费学习课堂
推荐文章
你知道高流量站点NGINX与PHP-fpm配置是如何优化的吗?
来源:北京汇仁智杰科技有限公司   时间:2016-04-09   点击: 次
					推荐文章
- 织梦dedecms漏洞修复大全含任意文件2016-09-05
- 整顿微信公众号过度营销 对严重违2016-01-26
- SEO优化过程要避免什么?2016-01-26
- 网站空间被挂马的原因原因及解决2016-01-26
- 2016企业该如何运用互联网进行营销2016-01-26
- WEB前端项目开发中需注意的细节2016-01-26
- 低价网站建设的危害有哪些?2016-01-15
- 如何详细的分析你网站的竞争对手2015-06-10
- 网站设计中四个常犯的错误2015-01-22
- 如何搭配网站设计中的色彩?2015-01-22





 
			 
			