优化Web服务器(apache2 + nginx + memcached + eaccelerator)为高负载沉重的应用程序

我有一个服务器(Apache2 + nginx作为反向代理,memcachedcaching和eaccelerator)。 该应用程序是Magento – 这是非常沉重的,由于高模块化和大量的PHP文件(5000-10000 +)。

软件版本:

服务器版本:Apache / 2.2.16(Debian)
服务器内置:Sep 25 2011 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 MHz:2399.701
caching大小:512 KB
 fdiv_bug:不
 hlt_bug:不
 f00f_bug:不
 coma_bug:不
 fpu:是的
 fpu_exception:是的
 cpuid等级:2
 wp:是的
 flags: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
 bogomips:4799.40
 clflush大小:64
 cache_alignment:128
地址大小:36位物理,32位虚拟

内存

 root @ grandpa:〜#cat / proc / meminfo
 MemTotal:1293792 kB
 MemFree:77980 kB
缓冲区:89776 kB
caching:423168 kB
 SwapCached:160 kB
 Active:689012 kB
无效:445392 kB
 Active(anon):443016 kB
 Inactive(anon):182060 kB
 Active(文件):245996 kB
无效(文件):263332 kB
 Unevictable:0 kB
 Mlocked:0 kB
 HighTotal:404744 kB
 HighFree:24676 kB
 LowTotal:889048 kB
 LowFree:53304 kB
 SwapTotal:2526200 kB
 SwapFree:2525556 kB
脏:816 kB
写回:0 kB
 AnonPages:621300 kB
映射:57088 kB
 Shmem:3616 kB
板:47800 kB
 SReclaimable:35400 kB
 SUnreclaim:12400 kB
 KernelStack:2176 kB
 PageTables:4508 kB
 NFS_Unstable:0 kB
弹跳:0 kB
 WritebackTmp:0 kB
 CommitLimit:3173096 kB
 Committed_AS:1307224 kB
 VmallocTotal:122880 kB
 VmallocUsed:41768 kB
 VmallocChunk:70512 kB
 HardwareCorrupted:0 kB
 HugePages_Total:0
 HugePages_Free:0
 HugePages_Rsvd:0
 HugePages_Surp:0
 Hugepagesize: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

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

并发级别:20
testing时间:842.750秒
完成请求:1000
失败的请求:0
写错误:0
总传输量:21955000字节
 HTML传输:21497000字节
每秒请求数:1.19 [#/秒](平均值)
每个请求的时间:16854.999 [ms](平均值)
每个请求的时间:842.750 [ms](意味着跨所有并发请求)
传输速率:25.44 [千字节/秒]收到

连接时间(ms)
              分钟平均值[+/- sd]中值最大值
连线: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) 

这里是更大的testing:

 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

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

并发级别:40
testing时间:4230.975秒
完成请求:5000
失败的请求:0
写错误:0
总传输量:109795470字节
 HTML传输:107505012字节
每秒请求数:1.18 [#/秒](平均值)
每个请求的时间:33847.804 [ms](mean)
每个请求的时间:846.195 [ms](意味着跨所有并发请求)
传输速率:25.34 [千字节/秒]收到

连接时间(ms)
              分钟平均值[+/- sd]中值最大值
连线: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
保持活跃
 MaxKeepAliveRequests 100
 KeepAliveTimeout 15


     StartServers 5
     MinSpareServers 5
     MaxSpareServers 10
     MaxClients 20
     MaxRequestsPerChild 0


nginx.conf:

 worker_processes 1;
事件{
         worker_connections 1024;
 }
 http {
        包括/etc/nginx/mime.types;
         default_type application / octet-stream;
         server_names_hash_bucket_size 64;
         access_log /var/log/nginx/access.log;

        发送文件;
         #tcp_nopush在;

         #keepalive_timeout 0;
         keepalive_timeout 65;
         tcp_nodelay;


         gzip on;
         gzip_proxied任何;
         gzip_min_length 1100;
         gzip_http_version 1.0;
         gzip_buffers 4 8k;
         gzip_comp_level 9;
         gzip_types text / plain text / css application / x-javascript text / xml application / xml application / xml + rss text / javascript;


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

eAccelerator从php.ini:

 ;  eAcceleratorconfiguration
 ; 请注意,eAccelerator也可以作为PHP扩展或zend_extension安装
 ; 如果您正在使用线程安全构build的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”

有了这个CPU,你将得到的TPS / RPS最好的数字是大约5.你有旧的硬件,如此高的并发性是你永远不会有的。 但是,您可以通过改变模板性能来降低页面加载时间(精灵,组合css / js等)

为了您的testing,暂时放弃Nginx。 由于您纯粹正在testingPHP吞吐量,因此Nginx(及其configuration)正在迎头赶上。

关注Apache和PHPconfiguration本身。

一些初学者提示:

  1. 增加PHP的SHM大小(一定要先增加ulimit)
  2. 禁用Apache Keepalive(当使用Nginx时,Apache不会提供除1dynamic请求以外的任何内容,所以Keepalive会减慢速度)。
  3. 使用Eaccelerator降低压缩级别到7左右,增加CPU开销(你没有)

但是,如果我诚实的话,在一个1.2GB的内存的P4 – 你永远不会得到很好的结果:(