YOLO813

Web服务器测试: Nginx的优化措施测试

优化的措施涉及以下方面:   

  • 工作进程优化,控制大并发。
  • 长连接,优化三次握手、四次断开。
  • 压缩优化,降低带宽压力。
  • 客户端缓存优化,带宽压力减小,加载速度更快。

工作进程优化

    对于工作进程,启动数量和服务器的核数相等或者倍之,具体可以观察内存消耗来进行判断。

    服务器4核

cat /proc/cpuinfo | grep "processor"| wc -l
=>4

    nginx.conf的配置,配置worker_processes为4

user  zhangxiaofei;
# 启动工作进程数量
worker_processes  4;

    假设我不具体干涉nginx的分配,可以看到nginx确实启动了4个工作进程(下图一),但是其分配到cpu上并非设想的一核一N,下图二,4个nginx进程挂在了0和2的cpu上(从左到右分别为PSR-显示运行此进程的cpu,PID-进程pid,ARGS-显示进程的名字(该进程执行时传入的命令行参数))

ps -eo psr,pid,args | grep nginx

    再次修改nginx.conf配置文件,增加以下代码,并重启测试,分配的妥妥帖帖,下图

#指定运行的核的编号,采用掩码的方式设置编号
worker_cpu_affinity 0001 0010 0100 1000;

    至于worker_connections该设置多少,自己可以先设置大一点,然后根据cpu的使用率来进行增改

events {
#单个工作进程维护的请求队列长度
    worker_connections  1024;
}

    如何查看nginx的连接数

netstat -antpl | grep nginx

    观察cpu的使用率,命令top 1


长连接

    http协议属于tcp协议,那么每次建立连接都需要三次握手和四次断开。

#长连接时间
# keepalive_timeout  5;
keepalive_timeout  0;
#每个长连接接受的最大请求数
keepalive_requests 8192;

    keepalive_timeout设置为0,谷歌浏览器开发者工具中可以看见response headers(非request headers)中的connection为close,注意状态码非304!下图

在服务器中,可以使用netstat命令查看连接情况。


数据压缩

    开启gzip,访问时间不一定能缩短,但是压缩数据可以节省带宽

gzip  on;
#更多优化
#无条件压缩所有结果数据
gzip_proxied any;
#启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
#设置压缩所需要的缓冲区大小
gzip_buffers 4 8k;
#gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 4;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain text/css application/x-javascript application/javascript application/xml;

    前端页面响应头中可以看见压缩标志


客户端缓存

    将一些图片等资源缓存到客户端的磁盘上。

    未配置时,调试工具响应头的图片如下

    nginx.conf配置文件中,增加以下代码

location ~* \.(png|gif|jpg)$ {
      expires 1h;
}

    再次查看响应头,多了Expires字段