網絡IO子系統
iptraf 查看當前主機的各個網絡設備的流量情況
安裝:解壓 ; ./Setup
使用:# iptraf -d eth0
netperf 基於c/s架構的帶寬測試工具,能夠測試出網絡設備的帶寬能去到多少。
使用:
服務端:需要測試帶寬的一端:
# netserver
測試端:用於測試連接服務器能夠達到最大的帶寬
# netperf -H 10.1.1.22 -l 30
# netperf -H 10.1.1.22 -l 30
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.1.1.22 (10.1.1.22) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 30.05 90.92 <--- 百M網卡能達到90是非常不錯。
實時查看網卡的流量
# sar -n DEV 2 5
例子:
# strace -vf -p pid
例子:壓力測試lnmp,判斷服務器在高併發的情況下,到底是最消耗哪種系統資源?有麼有辦法進行調優?
該服務器安裝nginx+mysql+php,跑的應用是phpwind論壇
模擬併發10000-20000
# ulimit -SHn 65535
# ab -c 2000 -n 60000 http://10.1.1.22/read.php?tid=1
查看當前的併發連接數
http://10.1.1.22/status
結論:cpu成爲瓶頸
php-cgi進程 32*10M ~= 350
nginx進程 2*20M ~= 40M
1、什麼進程最活躍,消耗大量cpu <---php-cgi
用於編譯php代碼
解決:eAccelerator模塊
2、前端增加squid作爲靜態元素的緩存。
靜態元素的訪問請求是有原始web服務的nginx來處理,所以增加squid只能起到很小的作用。
舊的常見的架構:
clients
|
squid <---啓動緩存作用,只能針對文件服務器(附件服務)
|
nginx
缺點:所有動靜請求都經過squid,squid會可能成爲瓶頸。
不能緩存動態頁面
如果強制緩存動態頁面,會導致動頁頁面更新丟失,客戶端看不到最新的頁面。所以這種強制緩存只適合動態頁面更新不頻繁的文章系統。不適論壇。
或者使用動態頁面靜態化技術(只適合文章系統,不適合論壇)
新的架構
clients
|
nginx/haproxy <----調度
|
|-------------------|
nginx_web <-----> squid
3、針對nginx或者php-cgi進行調優,關閉不必要功能和模塊,關閉不必要其他系統服務
考慮關閉壓縮模塊
如果非要壓縮功能,一般也壓縮:
txt,htm,html,css,js
不會去壓縮: xml,rar,圖片
如果服務器併發數太低,cpu還非常充裕:
允許nginx接受更多併發:
worker_connections 65535;
使用php-cgi進程自身的緩存功能
缺點:與強制打開squid動態頁面緩存一樣。
打開緩存 《--- 減少運算,減少IO
有緩存,就適當加大緩存
有隊列,加大隊列
如果cpu充裕,php-cgi返回503報錯,可以打開更多的php-cgi進程
# vim /usr/local/etc/php-fpm.conf
<value name="max_children">32</value> // 內存超過4G,而且cpu充裕,可以64以上
<value name="rlimit_files">204800</value>
<value name="max_requests">65535</value>
備忘:
雙網卡綁定