热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在64M内存的vps上优化Nginx服务器

Nginx小巧,高效,稳定等优点非常适合配置不高,内存小的VPS。这里的优化策略不是让nginx每秒能处理更多的请求,那是一个繁忙网站要做的。记住,这是一个只有64MB的VPS,对于架设一个访问量不大的网站/博客来说,尽可能减少Nginx的内存占用率是最重要的
Nginx 小巧,高效,稳定等优点非常适合配置不高,内存小的 VPS。这里的优化策略不是让nginx每秒能处理更多的请求,那是一个繁忙网站要做的。记住,这是一个只有 64MB 的 VPS,对于架设一个访问量不大的网站/博客来说,尽可能减少 Nginx 的内存占用率是最重要的,用尽量小的 Nginx 占用内存去满足不大的访问量。

优化 nginx.conf
Nginx 运行的进程数,一般设置成和 CPU 的核数相同。
worker_processes  1;
使用 epoll,Linux 内核2.6版本以上支持 epoll(eventport支持 Soaris,kqueue 支持 BSD系列),worker_connections 每个 Nginx 进程所允许的最大的连接数,max_clients = worker_processes * worker_connections。
 events {
    use epoll;
    worker_connections  128;
 }
设置连接的超时时间。
keepalive_timeout  5;
Linux内核相关,用 kernel file buffer 直接发送数据给 network interface,不需要另用 buffer 中转,通过调用内核级 sendfile() 来提高性能(Linux kernel的sendfile是如何提高性能的)。tcp_nopush 这个参数只有 sendfile on 的时候才有用。tcp_nodelay 只在 keepalive 连接状态中使用。sendfile     on;
tcp_nopush   on;
tcp_nodelay  on;
gzip 压缩方面的参数,分别是:支持 gzip 压缩,回送给客户端最小的 gzip 压缩大小,gzip 压缩缓存,要 gzip 压缩的文件类型,压缩程度,vary header 支持,gzip http 版本默认是1.1,如果前端是 squid2.5 则使用1.0。
gzip              on;
gzip_min_length   1000;
gzip_buffers      4 8k;
gzip_types    text/* text/css application/Javascript application/x-Javascript;
gzip_comp_level   5;
gzip_vary         on;
gzip_http_version 1.1;

性能测试
ab(Apache Bench)是一个用来测试 Apache HTTP Serve r的工具,主要用来测试 Apache 的性能,尤其是展示 web server 每秒能处理多少次请求。
Debian 下安装 ab:
#apt-get install apache2-utils
开始测试,下面的命令将会打开10个连接并且使用 Keep-Alive,通过这30个连接进行压力测试。不要在 web server 上本机测试,最好用另外一台机器。
#ab -kc 10 -t 30 http://www.server110.com/
优化 Nginx 前测试:
Finished 196 requests
Server Software:        nginx/0.6.32
Server Hostname:        www.server110.com
Server Port:            80
Document Path:          /
Document Length:        26186 bytes
Concurrency Level:      10
Time taken for tests:   30.4440 seconds
Complete requests:      196
Failed requests:        195
   (Connect: 0, Length: 195, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      5172095 bytes
HTML transferred:       5128733 bytes
Requests per second:    6.53 [#/sec] (mean)
Time per request:       1530.839 [ms] (mean)
Time per request:       153.084 [ms] (mean, across all concurrent requests)
Transfer rate:          168.31 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       46   46   1.8     47      61
Processing:   367 1442 152.0   1432    1718
Waiting:      253 1332 155.3   1323    1615
Total:        414 1488 152.0   1480    1766
Percentage of the requests served within a certain time (ms)
  50%   1480
  66%   1523
  75%   1561
  80%   1585
  90%   1617
  95%   1641
  98%   1659
  99%   1708
 100%   1766 (longest request)
优化后测试:
Finished 187 requests
Server Software:        nginx/0.6.32
Server Hostname:        www.server110.com
Server Port:            80
Document Path:          /
Document Length:        26030 bytes
Concurrency Level:      10
Time taken for tests:   30.21724 seconds
Complete requests:      187
Failed requests:        186
   (Connect: 0, Length: 186, Exceptions: 0)
Write errors:           0
Keep-Alive requests:    0
Total transferred:      4943176 bytes
HTML transferred:       4901785 bytes
Requests per second:    6.23 [#/sec] (mean)
Time per request:       1605.440 [ms] (mean)
Time per request:       160.544 [ms] (mean, across all concurrent requests)
Transfer rate:          160.78 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       46   47   2.5     47      71
Processing:   420 1511 300.3   1445    2744
Waiting:      325 1394 283.8   1333    2633
Total:        466 1558 300.6   1492    2794
Percentage of the requests served within a certain time (ms)
  50%   1491
  66%   1539
  75%   1574
  80%   1622
  90%   1700
  95%   2227
  98%   2682
  99%   2782
 100%   2794 (longest request)

结论
粗略看一下上面的数据,可能会发现优化后的性能还下降了,这是为什么呢?主要是因为 gzip on 增加了服务器的负载,需要 CPU/内存去压缩,很大程度影响到了实际性能。从内存使用的角度来说,我们优化的目的达到了,用 top 显示运行优化前的 nginx 占用了 1.54MB 的内存,运行优化后的 nginx 只占用了0.58MB。 节省了内存,牺牲了一点性能。不知道这个算不算优化呢?有的人追求速度,有的人追求节省资源,有的人追求稳定,我们主要看优化的目的是什么,才能根据自己所需进行改良。
对于一个访问量不大的网站/博客来说,每秒能处理的请求数不是太重要,只要这个请求数能应付那点访问量就可以了。对于只有 64MB 的 VPS 来说,要运行的东西太多,php/mysql/wordpress 等都是耗内存大户,这个时候内存资源显得尤为重要,尽可能腾出空间来给这些必须的程序减少程序内存不够导致的频繁 swapping 才能从整体上提高性能。其实硬盘 IO 才是一个 web server 最大的性能瓶颈,这是另外一个话题。

推荐阅读
author-avatar
平凡的冰冰凝凝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有