zoukankan      html  css  js  c++  java
  • nginx 优化

    =>worker_processes auto; 

    worker_processes 定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量。不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。

    =>worker_rlimit_nofile 65535; 

    worker_rlimit_nofile 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。

    =》Events模块
    events模块中包含nginx中所有处理连接的设置。
    events { 
        worker_connections 65535; 
        multi_accept on; 
        use epoll; 
    } 

    worker_connections 设置可由一个worker进程同时打开的最大连接数。每个进程允许的最多连接数, 理论上每台nginx 服务器的最大连接数为worker_processes*worker_connections。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得跟worker_rlimit_nofile值一样。(记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。) multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。 use 设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。 (值得注意的是如果你不知道Nginx该使用哪种轮询方法的话,它会选择一个最适合你操作系统的)

    =>配置Nginx多核

    Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。

    配置Nginx多核CPU,worker_cpu_affinity使用方法和范例:

    1. 2核CPU,开启2个进程

    worker_processes  2;
    worker_cpu_affinity 01 10;
    01表示启用第一个CPU内核,10表示启用第二个CPU内核
    worker_cpu_affinity 01 10;表示开启两个进程,第一个进程对应着第一个CPU内核,第二个进程对应着第二个CPU内核。

    2. 2核CPU,开启4个进程

    worker_processes     4;
    worker_cpu_affinity 01 10 01 10;
    开启了四个进程,它们分别对应着开启2个CPU内核

    3. 4核CPU,开户4个进程

    worker_processes     4;
    worker_cpu_affinity 0001 0010 0100 1000;
    0001表示启用第一个CPU内核,0010表示启用第二个CPU内核,依此类推

    4. 4核CPU,开启2个进程

    worker_processes     2;
    worker_cpu_affinity 0101 1010;
    0101表示开启第一个和第三个内核,1010表示开启第二个和第四个内核

    2个进程对应着四个内核

    worker_cpu_affinity配置是写在/etc/nginx/nginx.conf里面的。
    2核是 01,四核是0001,8核是00000001,有多少个核,就有几位数,1表示该内核开启,0表示该内核关闭。

    5. 8核CPU,开户8个进程

    worker_processes     8;
    worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
    
    worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。
    配置完毕后,重启nginx ,执行/etc/init.d/nginx restart

    =>HTTP 模块

    gzip on; 
    gzip_disable "msie6"; 
    # gzip_static on; 
    gzip_proxied any; 
    gzip_min_length 1000; 
    gzip_comp_level 4; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    gzip 是告诉nginx采用gzip压缩的形式发送数据。这将会减少我们发送的数据量。

    gzip_disable 为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。

    gzip_static 告诉nginx在压缩资源之前,先查找是否有预先gzip处理过的资源。这要求你预先压缩你的文件(在这个例子中被注释掉了),从而允许你使用最高压缩比,这样nginx就不用再压缩这些文件了(想要更详尽的gzip_static的信息,请点击这里)。

    gzip_proxied 允许或者禁止压缩基于请求和响应的响应流。我们设置为any,意味着将会压缩所有的请求。

    gzip_min_length 设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。

    gzip_comp_level 设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。

    gzip_type 设置需要压缩的数据格式。上面例子中已经有一些了,你也可以再添加更多的格式。

  • 相关阅读:
    用tcpdump 分析如何建立与关闭tcp连接 邓维 博客园
    Javascript基础与面向对象基础~Javascript中的语句如何被执行,如何改变执行顺序
    Javascript基础与面向对象基础~第一讲 啥叫编程,啥叫程序员
    将不确定变为确定~本机是否可以调试带域名的网站
    将不确定变为确定~为什么发布项目时用release环境更好些
    c/c++ 调用dos 命令
    C++基类与派生类的转换
    c++ max_elment和min_element
    c++ 无法链接的外部变量
    转:c++ 基类转换为派生类
  • 原文地址:https://www.cnblogs.com/aqicheng/p/10299236.html
Copyright © 2011-2022 走看看