Nginx优化


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






























Nginx是一个高性能的Web服务器和反向代理服务器,它具有占用资源少、处理请求快、支持高并发等优点,但是在大流量环境下,需要对Nginx进行优化,以提高性能和稳定性。 以下是一些Nginx优化的建议: 1. 调整worker_processes参数 worker_processes参数是Nginx的工作进程数,建议将其设置为CPU核心数的两倍。 例如,如果你的服务器有8个CPU核心,则可以将worker_processes设置为16。 2. 增加worker_connections参数 worker_connections参数表示每个工作进程可以同时处理的连接数,建议将其设置为1024或更高。 可以通过以下命令查看当前系统的最大连接数: ``` ulimit -n ``` 如果当前值较小,则需要增加该值: ``` ulimit -n 65535 ``` 3. 开启TCP Keepalive TCP Keepalive可以在连接空闲一段时间后,自动发送一个探测包,以保持连接的有效性。 可以通过以下命令开启TCP Keepalive: ``` tcp_nodelay on; tcp_nopush on; keepalive_timeout 60s; ``` 其中,keepalive_timeout表示空闲连接的超时时间。 4. 启用gzip压缩 启用gzip压缩可以减少传输数据量,提高网站的响应速度。 可以通过以下命令开启gzip压缩: ``` gzip on; gzip_min_length 1k; gzip_buffers 16 64k; gzip_http_version 1.1; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ``` 其中,gzip_types表示需要压缩的文件类型。 5. 限制请求速率 限制请求速率可以防止恶意攻击和DDoS攻击。 可以通过以下命令限制请求速率: ``` limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ``` 其中,$binary_remote_addr表示客户端IP地址,zone表示限制区域,10m表示限制区域的内存大小,rate表示请求速率。 6. 缓存静态文件 缓存静态文件可以减少文件的读取次数,提高网站的响应速度。 可以通过以下命令缓存静态文件: ``` location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1d; add_header Cache-Control "public"; } ``` 其中,expires表示文件的过期时间,add_header表示响应头信息。 以上是一些Nginx优化建议,需要根据实际情况进行调整和优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值