给大家带来CentOS下Nginx优化设置
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!优化前:优化后:
看得出差异仍是出格的年夜的.
一样平常来讲nginx设置文件中对优化对照有感化的为以下几项:
worker_processes8;
nginx历程数,倡议依照cpu数量来指定,通常是它的倍数,平常设置为2倍。
cpu个数检察***参考:http://blog.haohtml.com/archives/11123和http://blog.haohtml.com/archives/9236
worker_cpu_affinity0000000100000010000001000000100000010000001000000100000010000000;
为每一个历程分派cpu,上例中将8个历程分派到8个cpu,固然能够写多个,大概将一个历程分派到多个cpu。对worker_cu_affinity参数的优化参考:http://blog.haohtml.com/archives/14835
worker_rlimit_nofile102400;
这个指令是指当一个nginx历程翻开的最多文件形貌符数量,实际值应当是最多翻开文件数(ulimit-n)与nginx历程数相除,可是nginx分派哀求并非那末匀称,以是最好与ulimit-n的值坚持分歧。ulimit的用法参考:http://blog.haohtml.com/archives/9883
useepoll;
利用epoll的I/O模子,这个不必说了吧。
worker_connections102400;
每一个历程同意的最多毗连数,实际上每台nginx办事器的最年夜毗连数为worker_processes*worker_connections。
keepalive_timeout60;
keepalive超不时间。
client_header_buffer_size4k;
客户端哀求头部的缓冲区巨细,这个能够依据你的体系分页巨细来设置,一样平常一个哀求头的巨细不会凌驾1k,不外因为一样平常体系分页都要年夜于1k,以是这里设置为分页巨细。分页巨细能够用下令getconfPAGESIZE获得。
open_file_cachemax=102400inactive=20s;
这个将为翻开文件指定缓存,默许是没有启用的,max指定缓存数目,倡议和翻开文件数分歧,inactive是指经由多长工夫文件没被哀求后删除缓存。
open_file_cache_valid30s;
这个是指多长工夫反省一次缓存的无效信息。
open_file_cache_min_uses1;
open_file_cache指令中的inactive参数工夫内文件的起码利用次数,假如凌驾这个数字,文件形貌符一向是在缓存中翻开的,如上例,假如有一个文件在inactive工夫内一次没被利用,它将被移除。
关于内核参数的优化(/etc/sysctl.conf):
net.ipv4.tcp_max_tw_buckets=6000
timewait的数目,默许是180000。
net.ipv4.ip_local_port_range=102465000
同意体系翻开的端口局限。
net.ipv4.tcp_tw_recycle=1
启用timewait疾速接纳。
net.ipv4.tcp_tw_reuse=1
开启重用。同意将TIME-WAITsockets从头用于新的TCP毗连。
net.ipv4.tcp_syncookies=1
开启SYNCookies,当呈现SYN守候行列溢出时,启用cookies来处置。
net.core.somaxconn=262144
web使用中listen函数的backlog默许会给我们内核参数的net.core.somaxconn限定到128,而nginx界说的NGX_LISTEN_BACKLOG默许为511,以是有需要调剂这个值。
net.core.netdev_max_backlog=262144
每一个收集接口吸收数据包的速度比内核处置这些包的速度快时,同意送到行列的数据包的最年夜数量。
net.ipv4.tcp_max_orphans=262144
体系中最多有几个TCP套接字不被联系关系就任何一个用户文件句柄上。假如凌驾这个数字,孤儿毗连将马上被复位并打印出告诫信息。这个限定仅仅是为了避免复杂的DoS打击,不克不及太过依托它大概工资地减小这个值,更应当增添这个值(假如增添了内存以后)。
net.ipv4.tcp_max_syn_backlog=262144
纪录的那些还没有收到客户端确认信息的毗连哀求的最年夜值。关于有128M内存的体系而言,缺省值是1024,小内存的体系则是128。
net.ipv4.tcp_timestamps=0
工夫戳能够制止序列号的卷绕。一个1Gbps的链路一定会碰到之前用过的序列号。工夫戳可以让内核承受这类“非常”的数据包。这里必要将其关失落。
net.ipv4.tcp_synack_retries=1
为了翻开对真个毗连,内核必要发送一个SYN并附带一个回应后面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决意了内核保持毗连之前发送SYN+ACK包的数目。
net.ipv4.tcp_syn_retries=1
在内核保持创建毗连之前发送SYN包的数目。
net.ipv4.tcp_fin_timeout=1
假如套接字由本端请求封闭,这个参数决意了它坚持在FIN-WAIT-2形态的工夫。对端能够堕落并永久不封闭毗连,乃至不测当机。缺省值是60秒。2.2内核的一般值是180秒,你能够按这个设置,但要记着的是,即便你的呆板是一个轻载的WEB办事器,也有由于大批的逝世套接字而内存溢出的风险,FIN-WAIT-2的伤害性比FIN-WAIT-1要小,由于它最多只能吃失落1.5K内存,可是它们的保存期长些。
net.ipv4.tcp_keepalive_time=30
当keepalive升引的时分,TCP发送keepalive动静的频度。缺省是2小时。
上面贴一个完全的内核优化设置:
援用
net.ipv4.ip_forward=0
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.default.accept_source_route=0
kernel.sysrq=0
kernel.core_uses_pid=1
net.ipv4.tcp_syncookies=1
kernel.msgmnb=65536
kernel.msgmax=65536
kernel.shmmax=68719476736
kernel.shmall=4294967296
net.ipv4.tcp_max_tw_buckets=6000
net.ipv4.tcp_sack=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_rmem=4096873804194304
net.ipv4.tcp_wmem=4096163844194304
net.core.wmem_default=8388608
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.netdev_max_backlog=262144
net.core.somaxconn=262144
net.ipv4.tcp_max_orphans=3276800
net.ipv4.tcp_max_syn_backlog=262144
net.ipv4.tcp_timestamps=0
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_syn_retries=1
net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_mem=94500000915000000927000000
net.ipv4.tcp_fin_timeout=1
net.ipv4.tcp_keepalive_time=30
net.ipv4.ip_local_port_range=102465000
上面是一个复杂的nginx设置文件:
userwwwwww;
worker_processes8;
worker_cpu_affinity00000001000000100000010000001000000100000010000001000000;
error_log/www/log/nginx_error.logcrit;
pid/usr/local/nginx/nginx.pid;
worker_rlimit_nofile204800;
events
{
useepoll;
worker_connections204800;
}
http
{
includemime.types;
default_typeapplication/octet-stream;
charsetutf-8;
server_names_hash_bucket_size128;
client_header_buffer_size2k;
large_client_header_buffers44k;
client_max_body_size8m;
sendfileon;
tcp_nopushon;
keepalive_timeout60;
fastcgi_cache_path/usr/local/nginx/fastcgi_cachelevels=1:2
keys_zone=TEST:10m
inactive=5m;
fastcgi_connect_timeout300;
fastcgi_send_timeout300;
fastcgi_read_timeout300;
fastcgi_buffer_size64k;
fastcgi_buffers864k;
fastcgi_busy_buffers_size128k;
fastcgi_temp_file_write_size128k;
fastcgi_cacheTEST;
fastcgi_cache_valid2003021h;
fastcgi_cache_valid3011d;
fastcgi_cache_validany1m;
fastcgi_cache_min_uses1;
fastcgi_cache_use_staleerrortimeoutinvalid_headerhttp_500;
open_file_cachemax=204800inactive=20s;
open_file_cache_min_uses1;
open_file_cache_valid30s;
tcp_nodelayon;
gzipon;
gzip_min_length1k;
gzip_buffers416k;
gzip_http_version1.0;
gzip_comp_level2;
gzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;
gzip_varyon;
server
{
listen8080;
server_namebackup.aiju.com;
indexindex.phpindex.htm;
root/www/html/;#这里的地位很主要,不要写在别的指令内里,我已经就调试了很久才发明这个成绩的
location/status
{
stub_statuson;
}
location~.*.(php|php5)?$
{
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
includefcgi.conf;
}
location~.*.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
expires30d;
}
log_formataccess$remote_addr-$remote_user[$time_local]"$request"
$status$body_bytes_sent"$http_referer"
"$http_user_agent"$http_x_forwarded_for;
access_log/www/log/access.logaccess;
}
}
关于FastCGI的几个指令(http://wiki.nginx.org/NginxChsHttpFcgiModule):
fastcgi_cache_path/usr/local/nginx/fastcgi_cachelevels=1:2keys_zone=TEST:10minactive=5m;
这个指令为FastCGI缓存指定一个路径,目次布局品级,关头字地区存储工夫和非举动删除工夫。
fastcgi_connect_timeout300;
指定毗连到后端FastCGI的超不时间。
fastcgi_send_timeout300;
向FastCGI传送哀求的超不时间,这个值是指已完成两次握手后向FastCGI传送哀求的超不时间。
fastcgi_read_timeout300;
吸收FastCGI应对的超不时间,这个值是指已完成两次握手后吸收FastCGI应对的超不时间。
fastcgi_buffer_size64k;
指定读取FastCGI应对第一局部必要用多年夜的缓冲区,一样平常第一局部应对不会凌驾1k,因为页面巨细为4k,以是这里设置为4k。
fastcgi_buffers864k;
指定当地必要用几和多年夜的缓冲区来缓冲FastCGI的应对。
fastcgi_busy_buffers_size128k;
这个指令我也不晓得是做甚么用,只晓得默许值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size128k;
在写进fastcgi_temp_path时将用多年夜的数据块,默许值是fastcgi_buffers的两倍。
fastcgi_cacheTEST
开启FastCGI缓存而且为其制订一个称号。团体感到开启缓存十分有效,能够无效下降CPU负载,而且避免502毛病。
fastcgi_cache_valid2003021h;
fastcgi_cache_valid3011d;
fastcgi_cache_validany1m;
为指定的应对代码指定缓存工夫,如上例中将200,302应对缓存一小时,301应对缓存1天,其他为1分钟。
fastcgi_cache_min_uses1;
缓存在fastcgi_cache_path指令inactive参数值工夫内的起码利用次数,如上例,假如在5分钟内某文件1次也没有被利用,那末这个文件将被移除。
fastcgi_cache_use_staleerrortimeoutinvalid_headerhttp_500;
不晓得这个参数的感化,料想应当是让nginx晓得哪些范例的缓存是没用的。
以上为nginx中FastCGI相干参数,别的,FastCGI本身也有一些设置必要举行优化,假如你利用php-fpm来办理FastCGI,能够修正设置文件中的以下值:
<valuename="max_children">60</value>
同时处置的并发哀求数,即它将开启最多60个子线程来处置并发毗连。
<valuename="rlimit_files">102400</value>
最多翻开文件数。
<valuename="max_requests">204800</value>
每一个历程在重置之前可以实行的最多哀求数。
上面贴几张测试了局图。
静态页面为我在squid设置4W并发那篇文章中提到的测试文件,下图为同时在6台呆板运转webbench-c30000-t600http://backup.aiju.com:8080/index.html下令后的测试了局:
利用netstat过滤后的毗连数:
php页面在status中的了局(php页面为挪用phpinfo):
php页面在netstat过滤后的毗连数:
未利用FastCGI缓存之前的办事器负载:
此时翻开php页面已有些坚苦,必要举行屡次革新才干翻开。上图中cpu0负载偏低是由于测试时将网卡中止哀求全体分派到cpu0上,而且在nginx中开启7个历程分离制订到cpu1-7。
利用FastCGI缓存以后:
此时能够很轻松的翻开php页面。
这个测试并没有毗连就任何数据库,以是并没有甚么参考代价,不外不晓得上述测试是不是已抵达极限,依据内存和cpu的利用情形来看仿佛没有,可是已没有过剩的机子来让我运转webbench了。
Nginx使用多核cpu进步功能_设置参数worker_cpu_affinity
参考材料:
http://hi.百度.com/myus/blog/item/f37d05d1b1d1ad399a5027ff.html
http://kenwublog.com/docs/linux-kernel-2-6-36-optimization.htm
http://blog.sina.com.cn/s/blog_50a736440100j023.html
欢迎大家来到仓酷云论坛!
给大家带来CentOS下Nginx优化设置
LZ是天才,坚定完毕 放手去搞。尽量不要提问,运用搜索找答案,或者看wiki,从原理上理解操作系统的本质,而不是满足于使用几个技巧。尽量看英文资料。 最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。 选择一些适于初学者的Linux社区。 直到学习Linux这门课以后,我才知道,原来我错了。? 老实说,第一个程序是在C中编译好的,调试好了才在Linux下运行,感觉用vi比较麻烦,因为有错了不能调试,只是提示错误。 为什么要学Linux呢?每个人都有不同的看法,下面我说说自己的感想吧。? 一些显而易见的小错误还是用vi改正比较方便。以后的大一点的程序就得在Linux下调试了,因为有的头文件在VC里面说找不到。? 虽然大家都比较喜欢漂亮的mm,但是在学 linux 的过程中,还是要多和“男人”接触一下:P 遇到问题的时候,出来看说和上网查之外,就是要多用 linux 下的 man 命令找找帮助。
页:
[1]