Nginx优化

来源:互联网 发布:c语言写网络爬虫 编辑:程序博客网 时间:2024/05/29 11:28
Nginx优化
    1.编译优化
        1)取消debug模式,取消插入跟踪和ASSERT信息,有利于系统运行流畅。
  1. vim auto/cc/gcc
  2. #注释以下内容
  3. # debug
  4. #CFLAGS="$CFLAGS -g"
       2)特定CPU指定CPU类型
  1. --with-cc-opt='-O3'
  2. --with-cpu-opt=[CPU] #有效值:[pentium|pentiumpro|pentium3|pentium4|athlon|opteron|amd64|sparc32|sparc64|ppc64]
  3. #cat /proc/cpuinfo | grep "model name" 查看CPU类型
    2.利用TCMalloc优化Nginx性能
       TCPmalloc是谷歌开发的开源工具"google-perftools"中。在内存分配效率和速度上提升,提高服务器在高并发性的性能,降低系统负载。
       1.安装libunwind
  1. wget http://ftp.twaren.net/Unix/NonGNU//libunwind/libunwind-1.1.tar.gz
  2. tar -zxf libunwind-1.1.tar.gz
  3. cd libunwind-1.1
  4. ./configure CFLAGS=-fPIC
  5. make CFLAGS=-fPIC
  6. make CFLAGS=-fPIC install
       2.安装gperftools
  1. cd ..
  2. wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.1.90/gperftools-2.1.90.tar.gz
  3. tar -zxf gperftools-2.1.90.tar.gz
  4. cd gperftools-2.1.90
  5. ./configure #提前安装gcc+(yum install gcc-c++ -y)
  6. make && make install
  7. echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf

  8. ldconfig

       3.编译nginx
  1. ./configure \
  2. --prefix=/usr/local/nginx \
  3. --with-google_perftools_module
  4. make && make install
       4.为google_perftools创建线程目录
  1. mkdir /tmp/tcmalloc
  2. chmod 777 /tmp/tcmalloc/
       5.nginx配置文件加入后启动
  1. google_perftools_profiles /tmp/tcmalloc;
       6.查看安装是否成功(yum install lsof -y)
  1. lsof -n | grep tcmalloc
   3.内核参数优化
  1. vim /etc/sysctl.conf
  2. net.ipv4.tcp_max_tw_buckets = 6000
  3. net.ipv4.ip_local_port_range = 1024 65000
  4. net.ipv4.tcp_tw_recycle = 1
  5. net.ipv4.tcp_tw_reuse = 1
  6. net.ipv4.tcp_syncookies = 1
  7. net.core.somaxconn = 262144
  8. net.core.netdev_max_backlog = 262144
  9. net.ipv4.tcp_max_orphans = 262144
  10. net.ipv4.tcp_max_syn_backlog = 262144
  11. net.ipv4.tcp_synack_retries = 1
  12. net.ipv4.tcp_syn_retries = 1
  13. net.ipv4.tcp_fin_timeout = 1
  14. net.ipv4.tcp_keepalive_time = 30
  15. sysctl -p #立即生效
  1. net.ipv4.tcp_max_tw_buckets #用来设定timewait的数量 默认是180000,这里改为6000
  2. net.ipv4.ip_local_port_range #用来设定允许系统打开的端口范围最小值1024
  3. net.ipv4.tcp_tw_recycle #用来设置启动timewait快速回收。
  4. net.ipv4.tcp_tw_reuse #用来设置开启重用,允许将time-wait sockets重新用于新的tcp连接
  5. net.ipv4.tcp_syncookies #用来开启syn cookies,当出现syn等待队列一处时,启用cookies处理
  6. net.core.somaxconn #默认是128,参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致连接超时或者重传,因此,需要结合并发请求数来调节此值。
  7. net.core.netdev_max_backlog #表示当每个网络接口接受数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目。
  8. net.ipv4.tcp_max_orphans #用于设定系统中最多有多少个tcp套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位并打印出警告信息。这个限制值是为了防止简单的DOS攻击。不能过分依靠这个限制甚至人为减小这个值,更多的情况下应该增加这个值。
  9. net.ipv4.tcp_max_syn_backlog #用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128MB内存的系统而言,次参数默认值是1024,对小内存的系统则是128
  10. net.ipv4.tcp_synack_retries #参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
  11. net.ipv4.tcp_syn_retries #表示在内核放弃简历连接之前发送SYN包的数量
  12. net.ipv4.tcp_fin_timeout #决定了套接字保持在FIN-WAIT-2 状态的时间。默认值是60秒。正确设置这个值非常重要,有时即使一个负载很小的web服务器,也会出现大量的死套接字而产生内存溢出的风险。
  13. net.ipv4.tcp_keepalive_time #表示当keepalive启动的时候,tcp发送keepalive消息的频度。默认值是2(单位是小时)
    4.关于nginx连接限制(一个进程最大打开文件数)
  1. worker_rlimit_nofile 65535; nginx.conf
  2. #nginx配置改后,但系统默认最大1024,所以需要改变
  3. #立即生效
  4. ulimit -n 65535
  5. ulimit -u 65535
  6. #永久生效
  7. #一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。
  8. vim /etc/security/limits.conf
  9. * soft nproc 65535
  10. * hard nproc 65535
  11. * soft nofile 65535
  12. * hard nofile 65535
   
0 0