Nginx优化

来源:互联网 发布:rubymine linux 破解 编辑:程序博客网 时间:2024/06/05 15:39

1、编译过程优化
  •     减小编译后的文件大小:关闭debug模式
          修改auto/cc/gcc ,注释掉

#debug
CFLAGS="$CFLAGS -g"
  •     为特定的cpu指定cpu类型的编译
          nginx编译默认编译参数是“-O”,优化可是用下面两个参数

--with-cc-opt='-O3'
--with-cpu-opt=CPU #指定cpu类型有效值包括:pentium pentiumpro pentium3 pentium4 athlon opteron amd64 sparc32 sparc64 ppc64

查看cpu类型:cat /proc/cpuinfo | grep 'model name'
2、利用TCMalloc(Thread-Caching-Malloc)优化nginx性能
要安装TCMalloc库,依赖libunwind和google-perftools库
  •       安装libunwind

tar -zxvf libunwind-1.1.tar.gz
cd libunwind-1.1/
CFLAGS=-fPIC ./configure
make CFLAGS=-fPIC
make CFLAGS=-fPIC insall

  • 安装google-preftools
tar -zxvf gperftools-2.1.tar.gz
cd gperftools-2.1
./configure
make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
ldconfig

  • 重新编译Nginx
./configure --prefix=/usr/local/nginx --with-google_perftools_module --with-http_stub_status_module
make
make install
  • 为google-perftools增加线程目录
mkdir /tmp/tcmalloc
chmod 0777 /tmp/tcmalloc
  • 配置nginx.conf,在pid行增加一下内容
#pid logs/nginx.pid
google_perftools_profiles /tmp/tcmalloc;
重启,完成加载。
验证方法:
lsof -n | grep tcmalloc

3、内核参数优化

net.ipv4.tcp_max_tw_buckets = 6000            #设置timewait时间默认18000
net.ipv4.ip_local_port_range = 1024 65000     #设置允许打开的端口范围 
net.ipv4.tcp_tw_recycle = 1                   #设置启用timewait快速回收
net.ipv4.tcp_tw_reuse = 1                     #设置开启重用,允许将TIME_WAIT sockets重新用于新的连接
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             #设置用于系统中最多有多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数目,孤立连接将立即被复位并输出警告信息。这个限制只是为了防止DDOS攻击。不能过分依赖这个值,大多数情况下,是增加这个值,而非减小这个值
net.ipv4.tcp_max_syn_backlog = 262133         #用于记录那些没有收到客户端确认信息的连接请求最大值。对于128m内存默认值是1024,对于更小的默认值是128. 
net.ipv4.tcp_synack_retries = 1               #这个参数决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_syn_retries = 1                  #内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_fin_timeout = 1                  #决定了套接字保持在FIN-WAIT-2状态的时间,默认值是60。这个很重要,因为即使负载很小的web服务器,也可能因为出现大量的死套接字产生内存溢出的风险
net.ipv4.tcp_keepalive_time = 30              #表示当启用keepalive后,tcp发送keepalive的频度。默认是2(单位是小时)。 

syctl -p






























0 0