国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页服务器类Web服务器 → Nginx优化实例(突破十万并发)

Nginx优化实例(突破十万并发)

我要评论 2012/09/26 11:37:23 来源:国语自产精品视频在线看 编辑:zbbingyang.com [ ] 评论:0 点击:278次

nginx指令中的优化(配置文件)

worker_processes 8;

nginx进程数🔐,建议按🕺照【zhào】🚟cpu数目来【shù mù lái】指定【zhǐ dìng】,一般为它的倍数。

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

为每个【gè】🚩进程分【jìn chéng fèn】配🙀cpu,上例中【shàng lì zhōng】🌨将【jiāng】8个【gè】🚩进程分【jìn chéng fèn】配到👣8个【gè】🚩cpu,当然可以写多个【gè】🚩,或者将【jiāng】🌲一个【gè】🚩进程分【jìn chéng fèn】配到👣多个【gè】🚩cpu。

worker_rlimit_nofile 102400;

这个指令是指当一个🎩nginx进程打开的最多文件【duō wén jiàn】描述符数【shù】😜目,理论值🥁应该是最多打【zuì duō dǎ】开文件🏐数【shù】😜(ulimit -n)与nginx进程数【jìn chéng shù】😜相除,但是【dàn shì】🌋nginx分配请【fèn pèi qǐng】求并不🈸是那么【shì nà me】均匀🐄,所以最🐧好与ulimit -n的值保持一致【chí yī zhì】。

use epoll;

使用epoll的【de】I/O模型🚛,这个不用说了♿吧【ba】。

worker_connections 102400;

每个进【měi gè jìn】程允许的最多💂连接数【lián jiē shù】,理论上☝每台nginx服务器的最大连接数【lián jiē shù】为🛫worker_processes*worker_connections。

keepalive_timeout 60;

keepalive超时时【chāo shí shí】间😼。

client_header_buffer_size 4k;

客户端请求头🔐部的缓🧛冲区大😌小,这个可【zhè gè kě】以根据【yǐ gēn jù】你的系【nǐ de xì】统分页【tǒng fèn yè】💒大小【dà xiǎo】来🌹设置【shè zhì】,一般一个请求的头部大小不【dà xiǎo bú】💭会超过1k,不过由👆于一般系统分页【tǒng fèn yè】💒都要大于🕙1k,所以这【suǒ yǐ zhè】里设置【shè zhì】📇为分页大小【dà xiǎo】。分页大小【dà xiǎo】可以用命令getconf PAGESIZE取得【qǔ dé】。

open_file_cache max=102400 inactive=20s;

这个将📻为打开文【wén】📊件指定【jiàn zhǐ dìng】缓🤴存,默认是没有启用的【yòng de】,max指定缓🤴存数量🖇,建议和打开文【wén】📊件数一【jiàn shù yī】致,inactive是指经过多长【guò duō zhǎng】时间文【wén】🐂件没被【jiàn méi bèi】请求后【qǐng qiú hòu】删除缓⏺存。

open_file_cache_valid 30s;

这个是【zhè gè shì】指多长时间检查一次【chá yī cì】缓存的【huǎn cún de】🚘有效信🌷息🤧。

open_file_cache_min_uses 1;

open_file_cache指令中【zhǐ lìng zhōng】的🌽inactive参数时【cān shù shí】间内文👅件的🌽最少使用次数❣,如果超【rú guǒ chāo】🎨过这个【guò zhè gè】数字🕢,文件描述符一【shù fú yī】直是在【zhí shì zài】🌁缓存中【huǎn cún zhōng】打开的🌽,如上例,如果有一个文件在【jiàn zài】inactive时间内一次没被使用🗞,它将被移除😀。

内核参数的优化

net.ipv4.tcp_max_tw_buckets = 6000

timewait的数量【de shù liàng】🏸,默认是180000。

net.ipv4.ip_local_port_range = 1024 65000

允许系统⏰打开的【dǎ kāi de】🗽端口范【duān kǒu fàn】围。

net.ipv4.tcp_tw_recycle = 1

启用timewait快速回【kuài sù huí】💹收。

net.ipv4.tcp_tw_reuse = 1

开启重用🐓。允许将【yǔn xǔ jiāng】😴TIME-WAIT sockets重新用🐓于新的【yú xīn de】TCP连接。

net.ipv4.tcp_syncookies = 1

开启【kāi qǐ】🚜SYN Cookies,当出现SYN等待队【děng dài duì】📈列溢出时【shí】🙈,启用cookies来处理。

net.core.somaxconn = 262144

web应用中listen函数的🏉backlog默认会【mò rèn huì】🔓给我们【gěi wǒ men】内核参数的🏉net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为【mò rèn wéi】💆511,所以有【suǒ yǐ yǒu】必要调【bì yào diào】🔥整这个值🔘。

net.core.netdev_max_backlog = 262144

每个网【měi gè wǎng】🏕络接口【luò jiē kǒu】接收数据包的速率比内核处理这些【lǐ zhè xiē】🐀包的速率快时【lǜ kuài shí】👶,允许送🕕到队列的数据【de shù jù】🐜包的最大数目。

net.ipv4.tcp_max_orphans = 262144

系统中最多【zhōng zuì duō】🌽有多少🚻个TCP套接字【tào jiē zì】不被关🕟联到任【lián dào rèn】🦀何一个【hé yī gè】用户文【yòng hù wén】件句柄上。如果超【rú guǒ chāo】过这个数字,孤儿连⬅接将即刻被复【kè bèi fù】位并打印出警告信息。这个限制仅仅是为了🔹防止简㊙单的DoS攻击,不能过【bú néng guò】分依靠🕕它或者【tā huò zhě】人为地减小这【jiǎn xiǎo zhè】个值【gè zhí】,更应该📩增加这【zēng jiā zhè】🤚个值【gè zhí】(如果增✖加了内存之后🗞)。

net.ipv4.tcp_max_syn_backlog = 262144

记录的那些尚未收到【wèi shōu dào】😵客户端【kè hù duān】确认信息的连🧦接请求【jiē qǐng qiú】🐔的最大值【zhí】。对于有【duì yú yǒu】🖌128M内存的🍮系统而言【ér yán】,缺省值【zhí】是😔1024,小内存的🍮系统则是😔128。

net.ipv4.tcp_timestamps = 0

时间戳🐙可以避免序列号【hào】🆓的卷绕。一个1Gbps的链路【de liàn lù】⬜肯定会【kěn dìng huì】遇到以【yù dào yǐ】🗣前用过的序列【de xù liè】号【hào】🆓。时间戳🐙能够让内核接受这种【shòu zhè zhǒng】“异常”的数据【de shù jù】🤵包。这里需📘要将其关掉🖌。

net.ipv4.tcp_synack_retries = 1

为了打【wéi le dǎ】🏧开对端的🐏连接【lián jiē】,内核需【nèi hé xū】要发送一个【yī gè】💵SYN并附带一个【yī gè】💵回应前【huí yīng qián】面🐩一个【yī gè】💵SYN的🐏ACK。也就是【yě jiù shì】所谓三【suǒ wèi sān】次握手😣中的第🐦二次握手😣。这个设置决定💑了内核【le nèi hé】放弃连👠接之前发送SYN+ACK包的🐏数量。

net.ipv4.tcp_syn_retries = 1

在内核【zài nèi hé】👤放弃建立连接【lì lián jiē】之前发【zhī qián fā】送🎐SYN包的数量🧣。

net.ipv4.tcp_fin_timeout = 1

如果套【rú guǒ tào】接字由【jiē zì yóu】本端要【běn duān yào】求关闭🏋,这个参数决定【shù jué dìng】👀了它保💙持在🙌FIN-WAIT-2状态的时间。对端可【duì duān kě】以出错【yǐ chū cuò】并永远不关闭连接🆙,甚至意外当机【wài dāng jī】🚗。缺省值【quē shěng zhí】是60秒【miǎo】🤨。2.2 内核的通常值是180秒【miǎo】🤨,你可以【nǐ kě yǐ】按这个【àn zhè gè】设置【shè zhì】,但要记🕔住的是,即使你的机器是一个🐞轻载的🦕WEB服务器,也有因【yě yǒu yīn】为大量的死套接字而🎾内存⚓溢出的风险【fēng xiǎn】,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它🥣最多只🏎能吃掉👹1.5K内存⚓,但是它🈷们的生存期长【cún qī zhǎng】些。

net.ipv4.tcp_keepalive_time = 30

当🍍keepalive起用的时候🎽,TCP发送【fā sòng】keepalive消息的【xiāo xī de】🥇频度。缺省是【quē shěng shì】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 = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 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 = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30 net.ipv4.ip_local_port_range = 1024 65000

一个简单的【dān de】nginx优化配置文件

user  www www;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000;
error_log  /www/log/nginx_error.log  crit;
pid        /usr/local/nginx/nginx.pid;
worker_rlimit_nofile 204800;

events
{
  use epoll;
  worker_connections 204800;
}

http
{
  include       mime.types;
  default_type  application/octet-stream;

  charset  utf-8;

  server_names_hash_bucket_size 128;
  client_header_buffer_size 2k;
  large_client_header_buffers 4 4k;
  client_max_body_size 8m;

  sendfile on;
  tcp_nopush     on;

  keepalive_timeout 60;

  fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
                keys_zone=TEST:10m
                inactive=5m;
  fastcgi_connect_timeout 300;
  fastcgi_send_timeout 300;
  fastcgi_read_timeout 300;
  fastcgi_buffer_size 16k;
  fastcgi_buffers 16 16k;
  fastcgi_busy_buffers_size 16k;
  fastcgi_temp_file_write_size 16k;
  fastcgi_cache TEST;
  fastcgi_cache_valid 200 302 1h;
  fastcgi_cache_valid 301 1d;
  fastcgi_cache_valid any 1m;
  fastcgi_cache_min_uses 1;
  fastcgi_cache_use_stale error timeout invalid_header http_500;
  
  open_file_cache max=204800 inactive=20s;
  open_file_cache_min_uses 1;
  open_file_cache_valid 30s;
  


  tcp_nodelay on;
  
  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml;
  gzip_vary on;


  server
  {
    listen       8080;
    server_name  ad.test.com;
    index index.php index.htm;
    root  /www/html/;

    location /status
    {
        stub_status on;
    }

    location ~ .*\.(php|php5)?$
    {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fcgi.conf;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {
      expires      30d;
    }

    log_format  access  '$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.log  access;
      }
}

关于FastCGI的几个指令【zhǐ lìng】👴

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;

这个指🐸令为【lìng wéi】FastCGI缓存指定一个【dìng yī gè】😘路径,目录结【mù lù jié】🍌构等级🌕,关键字区域存储时间【shí jiān】🐫和非活动删除时间【shí jiān】。

fastcgi_connect_timeout 300;

指定连【zhǐ dìng lián】接到后端🖇FastCGI的超时【de chāo shí】💈时间。

fastcgi_send_timeout 300;

向FastCGI传送请求的超⏱时时间【shí shí jiān】🤪,这个值🛷是指已【shì zhǐ yǐ】经完成两次握【liǎng cì wò】🍂手后向FastCGI传送请求的超⏱时时间【shí shí jiān】🤪。

fastcgi_read_timeout 300;

接收【jiē shōu】FastCGI应答的🐍超时时间【jiān】🦂,这个值

关键词:Nginx

阅读本文后您有什么感想? 已有 人给出评价!

  • 0 欢迎喜欢
  • 0 白痴
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙视