注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

关于nginx+phpfpm布署高密度web系统的一些注意事项  

2016-03-18 10:25:41|  分类: nginx编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一. 将TCP切换为UNIX域套接字

          将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;

}

二. 调整工作进程数

现代计算机硬件是多处理器的,NGINX可以利用多物理或虚拟处理器。

多数情况下,你的Web服务器都不会配置为处理多种任务(比如作为Web服务器提供服务的同时也是一个打印服务器),你可以配置NGINX使用所有可用的处理器,NGINX工作进程并不是多线程的。

运行以下命令可以获知你的机器有多少个处理器:

Linux上

cat/proc/cpuinfo|grepprocessor

FreeBSD上

sysctldev.cpu|greplocation

将nginx.conf文件中work_processes的值设置为机器的处理器核数。

同时,增大worker_connections(每个处理器核心可以处理多少个连接)的值,以及将"multi_accept"设置为ON,如果你使用的是Linux,则也使用"epoll":

#Wehave16cores

worker_processes 16;

#高版本下使用auto也可以的

#connectionsperworker

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_logoff;

log_not_foundoff;

error_log/var/log/nginx-error.logwarn;

若你不能关闭访问日志文件,至少应该使用缓冲:

access_log/var/log/nginx/access.logmainbuffer=16k;

5. 启用GZip

gzipon;

gzip_disable"msie6";

gzip_varyon;

gzip_proxiedany;

gzip_comp_level6;

gzip_min_length1100;

gzip_buffers168k;

gzip_http_version1.1;

gzip_typestext/plaintext/cssapplication/jsonapplication/x-javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascript;

6. 缓存被频繁访问的文件相关的信息

open_file_cachemax=200000inactive=20s;

open_file_cache_valid30s;

open_file_cache_min_uses2;

open_file_cache_errorson;

7. 调整客户端超时时间

client_max_body_size500M;

client_body_buffer_size1m;

client_body_timeout15;

client_header_timeout15;

keepalive_timeout22;

send_timeout15;

sendfileon;

tcp_nopushon;

tcp_nodelayon;

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调优

#RecycleZombieconnections

net.inet.tcp.fast_finwait2_recycle=1

net.inet.tcp.maxtcptw=200000

#Increasenumberoffiles

kern.maxfiles=65535

kern.maxfilesperproc=16384

#Increasepagesharefactorperprocess

vm.pmap.pv_entry_max=54272521

vm.pmap.shpgperproc=20000

#Increasenumberofconnections

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

#Hostcache

net.inet.tcp.hostcache.hashsize=4096

net.inet.tcp.hostcache.cachelimit=131072

net.inet.tcp.hostcache.bucketlimit=120

#Increasenumberofports

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

#DisablePing-floodattacks

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

makeinstallBATCH=yes

  评论这张
 
阅读(76)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017