仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 389|回复: 6
打印 上一主题 下一主题

[CentOS(社区)] Linux教程之Nginx优化 办事器轻松冲破十万并发

[复制链接]
愤怒的大鸟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 21:13:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
小知识:CentOS在服务器提供商、中小型公司中装机量几乎是最大的Linux发行版。
nginx指令中的优化(设置文件)
worker_processes8;  nginx历程数,倡议依照cpu数量来指定,通常是它的倍数。
worker_cpu_affinity0000000100000010000001000000100000010000001000000100000010000000;  为每一个历程分派cpu,上例中将8个历程分派到8个cpu,固然能够写多个,大概将一个历程分派到多个cpu。
worker_rlimit_nofile102400;  这个指令是指当一个nginx历程翻开的最多文件形貌符数量,实际值应当是最多翻开文件数(ulimit-n)与nginx历程数相除,可是nginx分派哀求并非那末匀称,以是最好与ulimit-n的值坚持分歧。
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工夫内一次没被利用,它将被移除。
内核参数的优化
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=0net.ipv4.conf.default.rp_filter=1net.ipv4.conf.default.accept_source_route=0kernel.sysrq=0kernel.core_uses_pid=1net.ipv4.tcp_syncookies=1kernel.msgmnb=65536kernel.msgmax=65536kernel.shmmax=68719476736kernel.shmall=4294967296net.ipv4.tcp_max_tw_buckets=6000net.ipv4.tcp_sack=1net.ipv4.tcp_window_scaling=1net.ipv4.tcp_rmem=4096873804194304net.ipv4.tcp_wmem=4096163844194304net.core.wmem_default=8388608net.core.rmem_default=8388608net.core.rmem_max=16777216net.core.wmem_max=16777216net.core.netdev_max_backlog=262144net.core.somaxconn=262144net.ipv4.tcp_max_orphans=3276800net.ipv4.tcp_max_syn_backlog=262144net.ipv4.tcp_timestamps=0net.ipv4.tcp_synack_retries=1net.ipv4.tcp_syn_retries=1net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_mem=94500000915000000927000000net.ipv4.tcp_fin_timeout=1net.ipv4.tcp_keepalive_time=30net.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:2keys_zone=TEST:10minactive=5m;fastcgi_connect_timeout300;fastcgi_send_timeout300;fastcgi_read_timeout300;fastcgi_buffer_size16k;fastcgi_buffers1616k;fastcgi_busy_buffers_size16k;fastcgi_temp_file_write_size16k;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_namead.test.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的几个指令
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_size16k;  指定读取FastCGI应对第一部分必要用多年夜的缓冲区,这里能够设置为fastcgi_buffers指令指定的缓冲区巨细,下面的指令指定它将利用1个16k的缓冲区往读取应对的第一部分,即应对头,实在这个应对头一样平常情形下都很小(不会凌驾1k),可是你假如在fastcgi_buffers指令中指定了缓冲区的巨细,那末它也会分派一个fastcgi_buffers指定的缓冲区巨细往缓存。
fastcgi_buffers1616k;  指定当地必要用几和多年夜的缓冲区来缓冲FastCGI的应对,如上所示,假如一个php剧本所发生的页面巨细为256k,则会为其分派16个16k的缓冲区来缓存,假如年夜于256k,增年夜于256k的部分会缓存到fastcgi_temp指定的路径中,固然这对办事器负载来讲是不明智的计划,由于内存中处置数据速率要快于硬盘,一般这个值的设置应当选择一个你的站点中的php剧本所发生的页面巨细的两头值,好比你的站点年夜部分剧本所发生的页面巨细为256k就能够把这个值设置为1616k,大概464k大概644k,但很明显,后两种并非好的设置***,由于假如发生的页面只要32k,假如用464k它会分派1个64k的缓冲区往缓存,而假如利用644k它会分派8个4k的缓冲区往缓存,而假如利用1616k则它会分派2个16k往缓存页面,如许看起来仿佛加倍公道。
fastcgi_busy_buffers_size32k;  这个指令我也不晓得是做甚么用,只晓得默许值是fastcgi_buffers的两倍。
fastcgi_temp_file_write_size32k;  在写进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://ad.test.com:8080/index.html下令后的测试了局:

  利用netstat过滤后的毗连数:

  php页面在status中的了局(php页面为挪用phpinfo):


  php页面在netstat过滤后的毗连数:

  未利用FastCGI缓存之前的办事器负载:

  此时翻开php页面已有些坚苦,必要举行屡次革新才干翻开。上图中cpu0负载偏低是由于测试时将网卡中止哀求全体分派到cpu0上,而且在nginx中开启7个历程分离制订到cpu1-7。
  利用FastCGI缓存以后:

  此时能够很轻松的翻开php页面。
  这个测试并没有毗连就任何数据库,以是并没有甚么参考代价,不外不晓得上述测试是不是已抵达极限,依据内存和cpu的利用情形来看仿佛没有,可是已没有过剩的机子来让我运转webbench了。
小知识:Linux是一套免费使用和自由传播的类Unix操作系统。
愤怒的大鸟 该用户已被删除
沙发
 楼主| 发表于 2015-1-17 08:38:46 | 只看该作者
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
admin 该用户已被删除
板凳
发表于 2015-1-24 17:41:36 | 只看该作者
然我们对Linux的学习首先是通过对它的产生,发展,到今天仍然在不断完善开始的。
深爱那片海 该用户已被删除
地板
发表于 2015-2-24 02:36:22 | 只看该作者
Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。
分手快乐 该用户已被删除
5#
发表于 2015-3-7 12:04:41 | 只看该作者
可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。?
蒙在股里 该用户已被删除
6#
发表于 2015-3-15 07:30:07 | 只看该作者
熟读写基础知识,学得会不如学得牢。
再现理想 该用户已被删除
7#
发表于 2015-3-22 00:08:04 | 只看该作者
为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 04:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表