Apache 優(yōu)化
Apache 采用的是 MPM(Multi-Processing Module) 多道處理模塊。
它的作用是管理網(wǎng)絡(luò)連接,調(diào)度請求。
常見的 MPM 有 3 種:
- prefork:“要求每個請求互相獨立的情況下” 表現(xiàn)最好的 Web 服務(wù)器(Apache 默認)洞难。
- worker:支持混合的多線程進程。利用了線程低開銷的特點來支持更大量的請求潭袱。
- event
一些設(shè)置:
MaxClients:(prefork 模式)Apache 同時處理的請求數(shù)目。
-
MaxRequestsPerChild:(prefork 模式)進程處理多少個請求后將自動銷毀彤悔。
- 0 為無限晕窑,永不銷毀
- 負載高時蓝丙,設(shè)置為 0 或者比較大的值,以處理更多的請求
- 負載低時鸥跟,設(shè)置為比較小的值,以釋放內(nèi)存
ThreadsPerChild:(worker 模式)
實時查看 Apache 線程狀態(tài):
netstat -n | awk '/^tcp/{++S[$NF] END {for(a in S) print a, S[a]}}'
可以展示不同狀態(tài)的連接信息拟淮。
netstat 用于顯示各種網(wǎng)絡(luò)相關(guān)信息:
-
netstat -a
:顯示所有 -
netstat -t
:顯示 TCP 相關(guān) -
netstat -u
:顯示 UDP 相關(guān) -
netstat -l
:LISTEN 的服務(wù)
Apache VS Nginx
Apache | Nginx |
---|---|
輕量級角虫,反向代理 | |
阻塞處理方式 | 異步非阻塞處理方式 |
一個連接對應(yīng)一個進程 | 多個連接對應(yīng)一個進程 |
更適合動態(tài)請求,例如 PHP | 更適合靜態(tài)請求昏兆,例如 圖片隶债,HTML, CSS |
Nginx相對于Apache的優(yōu)點:
- 輕量級燃异,同樣啟動WEB服務(wù)逛腿,比Apache占用更少的內(nèi)存以及資源单默;
- 并發(fā)性能高引颈,核心區(qū)別在于Apache是同步多進程模型,一個連接對應(yīng)一個進程粱年。Nginx是異步的台诗,多個連接(萬級別)可以對應(yīng)一個進程弊知;
- Nginx模塊較少叔扼,配置簡單币励,所以Nginx可以將資源用在數(shù)據(jù)處理以及進程上面食呻,Apache模塊較多比較全,相對穩(wěn)定干旧,但在內(nèi)存資源上消耗比較大椎眯;
- Nginx可以在不間斷的情況下進行軟件版本的升級;
- Nginx處理靜態(tài)頁面性能比apache高3倍多乳丰;
PHP 優(yōu)化
php.ini 中的配置:
-
max_execution_time = 30
:PHP 腳本最長執(zhí)行時間 -
memory_limit = 8M
:PHP 腳本最大占用內(nèi)存 -
upload_max_filesize = 2M
: output_buffer
PHP 集成 memcache
- 安裝 memcached
- 安裝 memcached 的 php 擴展
- 啟動
memcached -d -m 10 -u root -l 127.0.0.1 -p 11211 -c 256
- 使用:
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);
// 設(shè)置
$mem->set("name", "Tom", 0, 60);
$val = $mem->get("name");
// 更新
$mem->replace("name", "Tom", 0, 60);
$val = $mem->get("name");
// 刪除
$mem->delete("name");
$arr = array("a", "b", "c");
$mem->set("arr", $arr, 0, 60);
$arr = $mem->get("arr");