基本優化 tuning apache 跟 tuning mysql 跟 php 效能

最近在玩優化 Apache 跟 MySQL 部份,然後就在 google 上面找一些資料,當然對我自己的網站當然改變不少,速度有增快許多,所以來紀錄一下,其實都是還蠻基本的改 config 檔案就可以了 1. apache 部份 for FreeBSD

#
# 利用 ports 安裝
# 在安裝 Apache 時,加入此參數 WITH_MPM=XXXX 即可。 
#
cd /usr/ports/www/apache22 ; make WITH_MPM=worker install clean
如果是要裝在 Linux 機器的話,可能要自己編譯,在 Apache 2.0 有很多效能上得改變,所以原本預設是 prefork
#
# 編譯加上 
# 
./configure --with-mpm=worker
在 Ubuntu 底下作法很奇怪,利用 apt-get 方式不能安裝 mpm worker,因為你安裝 php 的時候他會幫你移除,然後裝上 prefork,所以很奇怪,這部份我還不知道怎麼解決。

接下來設定 httpd-mpm.conf,目前我使用的設備 1g ram CPU x 2

#
# 修改 httpd-mpm.conf
#
vi /usr/local/etc/apache22/extra/httpd-mpm.conf
# worker MPM
# StartServers: initial number of server processes to start
# MaxClients: maximum number of simultaneous client connections
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestsPerChild: maximum number of requests a server process serves

# Apache 啟動時先開啟 5 個 Threads
    StartServers          5
# 最大的連線數
    MaxClients         1024
    ServerLimit          50
    MinSpareThreads      50
    MaxSpareThreads     200
    ThreadsPerChild      64
    MaxRequestsPerChild 200
    ThreadLimit          64

上面有很多參數,我不是很瞭解,所以還要去參考一下官方網站
#
# vi /usr/local/etc/apache22/extra/httpd-default.conf
#
# 連線超過 60 秒失敗就重試
Timeout 60
# 開啟 KeepAlive
KeepAlive On
# 設定同一時間可容許的 KeppAlive 量
MaxKeepAliveRequests 5000
# KeepAlive 多久要自動 Timeout 掉
KeepAliveTimeout 3
# 關掉那費時的 DNS 查尋
HostnameLookups Off
上面設定好的話,請重新啟動 apache
#
# 指令
#
/usr/local/etc/rc.d/apache22 restart
然後可以加上 php 模組:

[FreeBSD] 安裝 PHP APC 加速網頁速度 或者是加裝 Zend Optimizer (www.zend.com)

#
# 安裝
#
cd /usr/ports/devel/ZendOptimizer; make install clean
#
# 修改vi /usr/local/etc/php.ini 加入
#
[Zend]
zend_optimizer.optimization_level=15
zend_extension_manager.optimizer="/usr/local/lib/php/20060613-zts-debug/Optimizer"
zend_extension_manager.optimizer_ts="/usr/local/lib/php/20060613-zts-debug/Optimizer_TS"
zend_extension="/usr/local/lib/php/20060613-zts-debug/ZendExtensionManager.so"
zend_extension_ts="/usr/local/lib/php/20060613-zts-debug/ZendExtensionManager_TS.so"
在 MySQL 優化方面,其實在系統就有設定檔幫我們弄好了 FreeBSD 是放在 /usr/local/share/mysql 底下

* my-huge.cnf: 適合 1GB – 2GB RAM的主機使用。 * my-large.cnf: 適合 512MB RAM的主機使用。 * my-medium.cnf: 只有 32MB – 64MB RAM 的主機使用,或者有 128MB RAM 但需要運行其他伺服器,例如 web server。 * my-small.cnf: 記憶體少於 64MB 時適用這個,MySQL 會佔用較少資源。 選定好我們要的檔案之後,就把他移動到 mysql 設定的目錄底下

#
# 複製檔案
#
cp  /usr/local/share/mysql/my-huge.cnf /var/db/mysql/my.cnf
修改 my.cnf 檔案
#
# my.cnf 底下的 max_connections 跟 max_user_connections 
# 必須大於 apache 的 "MaxClients" 值
#
max_connections = 1024
max_user_connections = 1024
table_cache = 1200
#
# 因為 mysql 預設就是1個user就是用1個 connection
# MySQL defaults to 1 max connection, with 1 max connection per user
參考網站: http://ms.ntcb.edu.tw/~steven/article/apache-tuning.htm http://www-css.fnal.gov/dsg/external/freeware/mysqlTuning.html

Performance Tuning Apache for mod_perl and Cgi-Proxy Web Server Optimization Guide


See also