设为首页 加入收藏

TOP

性能优化概述(二)
2019-09-06 00:27:17 】 浏览:107
Tags:性能 优化 概述
核参数:让time_wait状态重用(端口重用)[flag] [root@web01 ROOT]# vim /etc/sysctl.conf net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_timestamps = 1 [root@web01 ROOT]# sysctl -p #可以查看我们添加的内核参数 [root@web01 ROOT]# sysctl -a #可以查看所有内核参数

在高并发短连接的TCP服务器上,当服务器处理完请求后立刻主动正常关闭连接。这个场景下会出现大量socket处于TIME_WAIT状态。如果客户端的并发量持续很高,此时部分客户端就会显示连接不上。 我来解释下这个场景。主动正常关闭TCP连接,都会出现TIMEWAIT。

为什么我们要关注这个高并发短连接呢?有两个方面需要注意: 1. 高并发可以让服务器在短时间范围内同时占用大量端口,而端口有个0~65535的范围,并不是很多,刨除系统和其他服务要用的,剩下的就更少了。 2. 在这个场景中,短连接表示“业务处理+传输数据的时间 远远小于 TIMEWAIT超时的时间”的连接。

这里有个相对长短的概念,比如取一个web页面,1秒钟的http短连接处理完业务,在关闭连接之后,这个业务用过的端口会停留在TIMEWAIT状态几分钟,而这几分钟,其他HTTP请求来临的时候是无法占用此端口的(占着茅坑不拉翔)。单用这个业务计算服务器的利用率会发现,服务器干正经事的时间和端口(资源)被挂着无法被使用的时间的比例是 1:几百,服务器资源严重浪费。(说个题外话,从这个意义出发来考虑服务器性能调优的话,长连接业务的服务就不需要考虑TIMEWAIT状态。同时,假如你对服务器业务场景非常熟悉,你会发现,在实际业务场景中,一般长连接对应的业务的并发量并不会很高。

代理服务优化

配置nginx代理服务使用长连接方式

upstream http_backend {
    server 127.0.0.1:8080;
    keepalive 16;   #长连接
}

server {
    ...
    location /http/ {
        proxy_pass http://http_backend;
        proxy_http_version 1.1;         #对于http协议应该指定为1.1
        proxy_set_header Connection ""; #清除“connection”头字段
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504;  #平滑过渡
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 30s;      # 代理连接web超时时间
        proxy_read_timeout 60s;         # 代理等待web响应超时时间
        proxy_send_timeout 60s;         # web回传数据至代理超时时间
        proxy_buffering on;             # 开启代理缓冲区,web回传数据至缓冲区,代理边收边传返回给客户端
        proxy_buffer_size 32k;          # 代理接收web响应的头信息的缓冲区大小
        proxy_buffers 4 128k;           # 缓冲代理接收单个长连接内包含的web响应的数量和大小
    ...
    }
}

对于fastcgi服务器,需要设置fastcgi_keep_conn以便保持长连接[flag]

upstream fastcgi_backend {
    server 127.0.0.1:9000;
    keepalive 8;
}

server {
    ...
    location /fastcgi/ {
        fastcgi_pass fastcgi_backend;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_keep_conn on;   
        fastcgi_connect_timeout 60s;
        include fastcgi_params;
        ...
    }
}

keepalive_requests设置通过一个keepalive连接提供的最大请求数,在发出最大请求数后,将关闭连接。

Syntax: keepalive_requests number;
Default: keepalive_requests 100;
Context: upstream

keepalive_timeout设置超时,再次期间与代理服务器的空闲keepalive连接将保持打开状态。

Syntax: keepalive_timeout timeout;
Default: keepalive_timeout 60s;
Context: upstream

#该指令出现在1.15.3版中

注意:
1.scgi和uwsgi协议没有保持连接的概念。
2.但无论是proxy、fastcgi、uwsgi协议都有cache缓存的功能,开启后可加速网站访问的效率。(取决硬件)

静态资源缓存

浏览器无缓存

浏览器有缓存

浏览器过期校验机制

浏览器If-None-Match   "9-1550193224000"   询问          web服务器  etag   "9-1550193224000"
浏览器认为只是缓存过期,内容并没有修改,所以协商后还是304
  浏览器If-Modified-Since  Tue, 29 Jan 2019 02:29:51 GMT
    询问   
  web服务器  Last-Modified:       Tue, 29 Jan 2019 02:29:51 GMT
浏览器认为只是缓存过期,内容并没有修改,所以协商后还是304

配置静态资源缓存场景

server {
    listen 80;
    server_name static.haoda.com;

    location ~ .*\.(jpg|gif|png)$ {
        expires      7d;
    }
    location ~ .*\.(js|css)$ {
        expires      30d;
    }
}

取消缓存

        location ~ \.*(png|jpg|gif|jpeg)$ {
                expires 30d;
                add_header Cache-Control no-store;
                add_header Pragma no-cache; 
        }
}

静态资源压缩

location ~*  .*\.(jpg|gif|png)$ {
    root /code/images;
    gzip on;
    gzip_http_version 1.1;
    gzip_comp_level 2; #极致为9,压缩的级别
    gzip_types  image/jpeg image/gif image/png; #文件格式
    }

针对txt

[root@Nginx conf.d]# cat static_server.conf 
server {
    listen 80;
    server_name static.oldboy.com;
    sendfile on;
    location ~ .*\.(txt|xml|html|json|js|css)$ {
首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Docker 容器命令大全 下一篇datalab (原发布 csdn 2018年09..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目