针对高负载重型应用优化 Web 服务器(apache2+nginx+memcached+eaccelerator)

针对高负载重型应用优化 Web 服务器(apache2+nginx+memcached+eaccelerator)

我有一台服务器(Apache2 + nginx 作为反向代理,memcached 缓存和 eaccelerator)。应用程序是 Magento - 由于高度模块化和大量 php 文件(5000-10000+),它非常重。

软件版本:

服务器版本:Apache/2.2.16(Debian)
服务器建立时间:2011 年 9 月 25 日 22:18:56

PHP 5.3.3-7+squeeze3 带 Suhosin-Patch (cli)

memcached STAT 版本 1.4.5(不是 php 模块)

eaccelerator php 模块 0.9.6.1

中央处理器:

root@grandpa:~# cat /proc/cpuinfo
处理器:0
vendor_id:GenuineIntel
CPU 系列:15
型号:2
型号名称:Intel(R) Pentium(R) 4 CPU 2.40GHz
步进:7
CPU频率:2399.701
缓存大小:512 KB
fdiv_bug :否
hlt_bug :否
f00f_bug : 没有
coma_bug :否
fpu:是
fpu_exception :是
cpuid 级别:2
wp :是的
标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe up pebs bts cid xtpr
博戈米普斯:4799.40
clflush 大小:64
缓存对齐:128
地址大小:36 位物理,32 位虚拟

内存

root@grandpa:~# cat /proc/meminfo
内存总量:1293792 kB
可用内存:77980 kB
缓冲区:89776 kB
缓存:423168 kB
交换缓存:160 kB
活动:689012 kB
不活动:445392 kB
活跃(匿名):443016 kB
不活跃(匿名):182060 kB
活动(文件):245996 kB
不活动(文件):263332 kB
不可驱逐:0 kB
锁定:0 kB
最高总和:404744 kB
高免费:24676 kB
低总计:889048 kB
低免费:53304 kB
交换总量:2526200 kB
可用交换空间:2525556 kB
脏:816 kB
回写:0 kB
匿名页面:621300 kB
映射:57088 kB
内存:3616 kB
板坯:47800 kB
可回收:35400 kB
取消回收:12400 kB
内核堆栈:2176 kB
页表:4508 kB
NFS_不稳定:0 kB
跳出率:0 kB
回写时间:0 kB
提交限制:3173096 kB
已提交:1307224 kB
Vmalloc总计:122880 kB
已使用 Vmalloc:41768 kB
VmallocChunk:70512 kB
硬件损坏:0 kB
大页面总数:0
HugePages_Free:0
HugePages_Rsvd:0
HugePages_Surp:0
大页面大小:4096 kB
DirectMap4k:36856 kB
DirectMap4M:868352 kB

目前 magento 的 ApacheBench 显示以下输出

Keefir-Samolet-iMac:〜jevgenismirnov $ ab -n 1000 -c 20 -e out.csv http://magento.sv/index.php
这是 ApacheBench,版本 2.3
版权所有 1996 Adam Twiss,Zeus Technology Ltd,http://www.zeustech.net/
已授权给 Apache 软件基金会,http://www.apache.org/

对 magento.sv 进行基准测试(请耐心等待)
已完成 100 个请求
已完成 200 个请求
已完成 300 个请求
已完成 400 个请求
已完成 500 个请求
已完成 600 个请求
已完成 700 个请求
已完成 800 个请求
已完成 900 个请求
已完成 1000 个请求
已完成 1000 个请求


服务器软件:nginx/1.0.11
服务器主机名:magento.sv
服务器端口:80

文档路径:/index.php
文档长度:21497 字节

并发级别:20
测试时间:842.750 秒
完成请求:1000
失败请求:0
写入错误:0
总共传输:21955000 字节
HTML 传输:21497000 字节
每秒请求数:1.19 [#/秒](平均)
每个请求的时间:16854.999 [毫秒](平均)
每个请求的时间:842.750 [毫秒](所有并发请求的平均值)
传输速率:已接收 25.44 [Kbytes/sec]

连接时间(毫秒)
              最小平均值[+/-标准差] 中位数 最大值
连接:0 4694 2456.3 5107 21387
处理:0 12121 2630.6 11442 19787
等待:0 10798 2575.2 10114 18369
总计:4985 16815 1367.8 16471 24861

一定时间内服务的请求百分比(毫秒)
  50% 16471
  66% 16728
  75% 16931
  80% 17226
  90% 18477
  95% 18763
  98% 21116
  99% 21388
 100% 24861(最长请求)

有什么方法可以提高

Requests per second:    1.19 [#/sec] (mean)

及以下

Time per request:       16854.999 [ms] (mean)

以下是更大的测试:

Keefir-Samolet-iMac:〜jevgenismirnov $ ab -n 5000 -c 40 -e out.csv http://magento.sv/index.php
这是 ApacheBench,版本 2.3
版权所有 1996 Adam Twiss,Zeus Technology Ltd,http://www.zeustech.net/
已授权给 Apache 软件基金会,http://www.apache.org/

对 magento.sv 进行基准测试(请耐心等待)
已完成 500 个请求
已完成 1000 个请求
已完成 1500 个请求
已完成 2000 个请求
已完成 2500 个请求
已完成 3000 个请求
已完成 3500 个请求
已完成 4000 个请求
已完成 4500 个请求
已完成 5000 个请求
已完成 5000 个请求


服务器软件:nginx/1.0.11
服务器主机名:magento.sv
服务器端口:80

文档路径:/index.php
文档长度:21497 字节

并发级别:40
测试时间:4230.975 秒
已完成请求:5000
失败请求:0
写入错误:0
总共传输:109795470 字节
HTML 传输:107505012 字节
每秒请求数:1.18 [#/秒](平均)
每个请求的时间:33847.804 [毫秒](平均)
每个请求的时间:846.195 [毫秒](所有并发请求的平均值)
传输速率:已接收 25.34 [Kbytes/sec]

连接时间(毫秒)
              最小平均值[+/-标准差] 中位数 最大值
连接:1 4786 2006.4 5111 37051
处理中:0 28979 2955.3 28296 39951
等待:0 27638 2904.5 26962 39950
总计:13425 33765 2189.4 33309 39953

一定时间内服务的请求百分比(毫秒)
  50% 33309
  66% 33829
  75% 34390
  80% 34915
  90% 36747
  95% 37618
  98% 37962
  99% 38306
 100% 39953(最长请求)

apache2.conf(使用prefork,仅更改了设置):

超时 300
保持活动状态
最大KeepAliveRequests 100
KeepAliveTimeout 15


    启动服务器 5
    最小备用服务器数 5
    最大备用服务器数 10
    最大客户数 20
    每个孩子的最大请求数 0


nginx.conf:

工作进程 1;
事件 {
        工作者连接1024;
}
http {
        包括/etc/nginx/mime.types;
        默认类型应用程序/八位字节流;
        服务器名称哈希桶大小64;
        访问日志/var/log/nginx/access.log;

        发送文件;
        #tcp_nopush 开启;

        #keepalive_timeout 0;
        保持活动超时 65;
        tcp_nodelay开启;


        开启 gzip;
        gzip_proxied任何;
        gzip_最小长度 1100;
        gzip_http_版本 1.0;
        gzip缓冲区4 8k;
        gzip_comp_level 9;
        gzip_types 文本/纯文本/css 应用程序/x-javascript 文本/xml 应用程序/xml 应用程序/xml+rss 文本/javascript;


        包括/etc/nginx/conf.d/*.conf;
        包括/etc/nginx/sites-enabled/*;
}

php.ini 中的 eAccelerator:

;eAccelerator 配置
; 请注意,eAccelerator 也可以作为 PHP 扩展或 zend_extension 安装
; 如果你使用的是线程安全的 PHP 版本,则必须使用
;zend_extension_ts 而不是 zend_extension
扩展名 = “eaccelerator.so”
eaccelerator.shm_size =“16”
eaccelerator.cache_dir = “/var/cache/eaccelerator”
eaccelerator.enable = "1"
eaccelerator.optimizer =“1”
eaccelerator.check_mtime = "1"
eaccelerator.debug = “0”
eaccelerator.filter =“”
eaccelerator.shm_max = “0”
eaccelerator.shm_ttl = “0”
eaccelerator.shm_prune_period =“0”
eaccelerator.shm_only = “0”
eaccelerator.compress =“1”
eaccelerator.compress_level =“9”
eaccelerator.allowed_admin_path =“/var/www/eaccelerator”

答案1

使用该 CPU,TPS/RPS 的最佳数字约为 5。您的硬件较旧,因此您永远无法实现高并发性。但您可以通过改进模板性能(spriting、组合 css/js 等)来缩短页面加载时间。

为了进行测试,暂时放弃 Nginx。由于您纯粹在测试 PHP 吞吐量,因此 Nginx(及其配置)会妨碍您。

专注于 Apache 和 PHP 配置本身。

一些入门提示:

  1. 增加 PHP 的 SHM 大小(务必先增加 ulimit)
  2. 禁用 Apache keepalive(使用 Nginx 时,Apache 除了 1 个动态请求外不提供任何其他服务,因此 keepalive 会减慢速度)。
  3. 使用 Eaccelerator 将压缩级别降低到 7 左右,这会增加 CPU 开销(而您没有)

但说实话,在配备 1.2GB RAM 的 P4 上,你永远不会获得很好的结果 :(

相关内容