一.利用tcmalloc优化nginx
   tcmalloc是一款用来<strong>优化高并发的内存分配器</strong>。tcmalloc的全称thread cache malloc,tcmalloc通过thread cache机制实现了大多数情况下的<strong>无锁内存分配</strong>。
   thread cache机制提供了一个连接池,也就是<strong>Thread_Cache池</strong>,将<strong>空闲的连接线程放在连接池中,当再次一个新的请求的时候,服务器不会立即去创建连接线程,而是先去Thread_Cache池中去查找空闲的连接线程,如果存在则直接使用,不存在才创建新的连接线程,从而降低了服务器的负载</strong>。
   tcmalloc是基于页的内存分配,而不是以字节作为单位进行内存分配,好处是有效的减少内存碎片,并且源数据的跟踪也比较方便。
   优化过程:
      http://download.savannah.gnu.org/releases/libunind   —libunwind
      在chinaunix搜索google-perftools下载。
   安装libunwind
   # tar zxf libunwind-0.99.tar.gz
   # cd libunwind-0.99
   # CFLAGS=-fPIC ./configure
   # make CFLAGS=-fPIC
   # make CFLAGS=-fPIC   install
  安装google-perftools
   # tar zxf google-perftools-1.8.2.tar.gz
   # cd google-perftools-1.8.2
   # ./configure
   # make && make install
   # echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.cont
   # ldconfig
   重新编译nginx,在编译时需要添加“--with-google_perftools_module”模块。
   [root@vm8 nginx-1.8.0]# ./configure --with-google_perftools_module --with-http_stub_status_module --with-http_ssl_module   
   --prefix=/usr/local/nginx
   # make && make install
   为google-perftools添加线程目录
   # mkdir /tmp/tcmalloc
   # chmod 0777 /tmp/tcmalloc
   修改nginx主配置文件
   # vim /usr/local/nginx/conf/nginx.conf
      #pid  logs/nginx.pid
    google_perftools_module     /tmp/tcmalloc
   检测nginx语法
   # nginx -t  
   结果显示错误:
   nginx: error while loading shared libraries: libprofiler.so.0: cannot open shared object file: No such file or directory
   表示64位libprofiler库不存在。
   # ldd /usr/local/nginx/sbin/nginx       ##查看系统支持的库
     libprofiler.so.0 => not found
   # whereis libprofiler.so.0      ##查看库目录依赖性所在位置
     libprofiler.so: /usr/local/lib/libprofiler.so /usr/local/lib/libprofiler.so.0
   建立链接
   # ln -s /usr/local/lib/libprofiler.so /lib64/libprofiler.so.0
   重启nginx服务
   # nginx -s stop
   # nginx
   用lsof命令查看tcmalloc进程是否存在,若存在,显示优化成功。
   # lsof -n | grep tcmalloc  
     nginx     23681  nobody   10w      REG              253,0        0      15724 /tmp/tcmalloc.23681

 二.Nginx内核参数优化
 # vim /etc/sysctl.conf
   net.ipv4.tcp_max_tw_buckets = 6000     ##表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为180 000,过多的TIME_WAIT套接字会使Web服务器变慢。
   net.ipv4.ip_local_port_range = 1024 65000    ##定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围
   net.ipv4.tcp_tw_recycle = 1    ##设置器用timeout的快速回收
   net.ipv4.tcp_tw_reuse = 1    ##设置开启重用,允许将处于TIME-WAIT状态的socket重新用于新的Tcp连接,提高nginx的效率。
   net.ipv4.tcp_syncookies = 1   ##设置开启syn  cookies,当出现syn等待队列溢出时,启用cookies进行处理。
   net.core.somaxconn = 262144   ##用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值128可能会导致连接超时或者重传,因此,需要调节并发数来调节此值
   net.core.netdev_max_backlog = 262144    ##当网卡接受数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值。
   net.ipv4.tcp_max_orphans = 262144   ##设定系统中最多有多少个套接字不被关联到任何一个用户文件句柄上,如果超过此值,孤立连接会立即被复位并打印出警告信息,此限制时为了防止简单的dos***,大部分情况应增大此值。
   net.ipv4.tcp_max_syn_backlog = 262144   ##表示TCP三次握手建立阶段接受SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求。
   net.ipv4.tcp_synack_retries = 1       ##此参数决定了内核在放弃连接之前发送syn+ack包的数量。
   net.ipv4.tcp_syn_retries = 1         ##表示在内核放弃建立连接之前发送syn包的数量。
   net.ipv4.tcp_fin_timeout = 1      ##表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间。
   net.ipv4.tcp_keepalive_time = 30  ##表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,若将其设置的小一些,可以更快地清理无效的连接。
   fs.file-max = 999999   ##表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直接限制最大并发连接数,需根据实际情况配置。
   # /sbin/sysctl -p     ##执行此命令使参数生效。