Apache-2.2
針對高負載重應用優化Web Server(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 : 正版英特爾 CPU系列:15 型號:2 型號名稱:Intel(R) Pentium(R) 4 CPU 2.40GHz 步進:7 中央處理器兆赫:2399.701 記憶體大小:512 KB fdiv_bug:沒有 hlt_bug:沒有 f00f_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 bogomips : 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 AnonPages:621300 kB 映射:57088 kB 記憶體:3616 kB 平板:47800 kB 可回收:35400 kB 回收:12400 KB 核心堆棧:2176 kB 頁表:4508 kB NFS_Unstable:0 kB 反彈:0 kB 寫回時間:0 kB 送出限制:3173096 kB 已送出_AS:1307224 kB Vmalloc 總計:122880 kB Vmalloc已使用:41768 kB VmallocChunk:70512 kB 硬體損壞:0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd:0 HugePages_Surp: 0 巨頁大小:4096 kB DirectMap4k:36856 kB DirectMap4M:868352 KB
目前 magento 的 ApacheBench 顯示以下輸出
Kefir-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 [#/sec](平均) 每個請求的時間:16854.999 [ms](平均值) 每個請求的時間:842.750 [ms](平均值,所有並發請求) 傳輸速率:收到 25.44 [Kbytes/sec] 連接時間(毫秒) 最小值平均值[+/-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)
這是更大的測試:
Kefir-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 [#/sec](平均值) 每個請求的時間:33847.804 [ms](平均值) 每個請求的時間:846.195 [ms](平均,所有並發請求) 傳輸速率:收到 25.34 [Kbytes/sec] 連接時間(毫秒) 最小值平均值[+/-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 保持活動超時 15 啟動伺服器 5 MinSpareServers 5 MaxSpareServers 10 最大客戶數 20 MaxRequestsPerChild 0
nginx.conf:
worker_processes 1; 事件{ worker_connections 1024; } http { 包括/etc/nginx/mime.types; default_type 應用程序/八位字節流; server_names_hash_bucket_size 64; access_log /var/log/nginx/access.log; 發送文件; #tcp_nopush 開啟; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay 開啟; gzip打開; 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; 包括/etc/nginx/sites-enabled/*; }
來自 php.ini 的 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"
使用該 CPU,TPS/RPS 的最佳值約為 5。您擁有舊硬體,因此您永遠不會擁有高並發性。但是您可以通過處理模板性能來降低頁面載入時間(精靈、組合 css/js 等)
為了您的測試,暫時放棄 Nginx。當您純粹是在測試 PHP 吞吐量時,Nginx(及其配置)會妨礙您。
專注於 Apache 和 PHP 配置本身。
一些入門提示:
- 增加 PHP 的 SHM 大小(一定要先增加 ulimit)
- 禁用 Apache keepalives(Apache 在使用 Nginx 時除了 1 個動態請求之外不提供任何服務,因此 keepalives 會減慢速度)。
- 使用 Eaccelerator 將壓縮級別降低到 7 左右,這會增加 CPU 成本(您沒有)
但老實說,在具有 1.2GB RAM 的 P4 上 - 你永遠不會得到很好的結果 :(