最近在使用 FreeBSD 架站,apache + MySQL + PHP,但是最近常常會吐出來 swap 不夠的情形,然後系統就會吐出下面訊息
Jun 19 20:59:57 backup kernel: swap_pager_getswapspace(7): failed
Jun 19 20:59:57 backup kernel: swap_pager_getswapspace(16): failed
Jun 19 20:59:57 backup kernel: swap_pager_getswapspace(2): failed
Jun 19 20:59:57 backup kernel: swap_pager_getswapspace(5): failed
目前上網看到的解決方法,都是增加 swap 的容量,那底下是在 FreeBSD 下面得作法:
Archive for the 'FreeBSD' Category
基本優化 tuning apache 跟 tuning mysql 跟 php 效能
Posted in FreeBSD, Linux, apache, mysql, php on Jun 18th, 2008
最近在玩優化 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,所以很奇怪,這部份我還不知道怎麼解決。
最近在維護自己的機器,發現網站每秒 request 只要10幾次就會感覺吃很多資源,然後莫名 CPU 飆高到100%,後來只好去找怎麼去 tuning Apache,MySQL,PHP,至於改善 apache 跟 MySQL 我先不講了,我之後會在寫,我先處理了加速 PHP 的部份,我是安裝了 APC(Alternative PHP Cache),來改善執行 PHP 的速度,這個程式必須先安裝好 PECL(PHP Extension Community Library),再來安裝 APC 就沒問題了。
1. 首先安裝 APC
#
# 先切換到該軟體下面
#
cd /usr/ports/www/pecl-APC/; make install clean
來紀錄一下好了,其實這兩年前,我自己就試過了,當時在弄 web 系統 Load Balancing,因為找不到更好的方法,所以使用 Round Robin DNS Load Balancing 技術來達到這功能,可是當然這不是很準確的做到 load balance,只是能解決暫時性的問題,真正要做到 Load Balancing 可能要靠硬體的技術了。
我自己是在 FreeBSD 系統上面實做的,當然弄 Load Balancing 一定要在網卡上面綁定多重ip,Linux 作法跟 FreeBSD 不大相同
#
# Linux 作法
#
ifconfig eth0:0 inet xxx.xxx.xxx.xx(1~9) netmask 255.255.255.0 broadcast xxx.xxx.xxx.255
#
# FreeBSD 作法
#
# /etc/rc.conf - add a new IP address to the NIC
# 在 rc.conf 加入底下 entry
ifconfig_rl0_alias0="192.168.0.57 netmask 0xffffffff"
#
# 指令
#
ifconfig rl0 alias [...]
我們在 Linux 或者是 FreeBSD 底下如何建立連結檔(Symbolic Link) ,也就是在 Windows 底下的捷徑啦,這個在鳥哥的網站都有寫的很清楚:連結檔的介紹: ln,最重要搞清楚 hard link 跟 soft link 就可以了,簡單來說,hard link 只可以針對檔案,不可以對目錄,但是 soft link 就是可以對目錄了,因為她就像 Windows 底下的捷徑,那在 Linux 底下,大家常常在玩 FTP,一定會碰到需要利用 Link 的方式,但是如果你利用 ln 的方式的話,連接ftp,會沒辦法回到上一層目錄,就是有 chroot 的問題,那底下是我發現可以解決的方法,其實這算是月經題了,只是我想記錄下來。
在 Linux 底下,就是利用 mount 的指令:
#
# 就是利用 mount --bind
#
mount --bind olddir newdir
在 FreeBSD 底下,利用 mount_nulls 指令
#
# mount_nullfs olddir newdir
#
mount_nullfs olddir newdir
很簡單吧,大概是這樣,FTP 就不會出現不能回到上一層目錄的問題了
來分享一個自己寫的 bash shell script,本身管理系上一些伺服器,但是要每天備份資料庫,系統檔案,以防系統整個 crash 掉,但是這個 script 可以對單一一台電腦做備份動作,當然裡面還可以加上 rsync 的動作,遠端備份到不同機器上面,我覺得這樣也可以,我在 Sayay BBS 上面的 ghost 大大版上看到 [Backup] Amanda,這套看起來不錯,可是一直沒有時間去玩,她網站的架構圖如下:
http://amanda.zmanda.com/
上面這個我還沒玩過,最近沒啥時間可以玩,不過大家可以去試試看,我目前還是用我自己寫的 script,那下面就是大概會介紹怎麼使用我的 bash script,非常簡單,很適合個人 linux 主機的備份喔。
最近在幫友人處理他們web跟資料庫的轉移,然後發現他們的資料庫是很古早的資料庫 MySQL 3.23.49 版本,相當古老吧,因為那個時候我才正值大二時代,剛開始接觸電腦的時候而已,連最基本的資料庫都不知道是什麼,哈哈經過這麼久終於發展到 MySQL 5版本了,不過從 MySQL 4.x 開始支援的 Unicode 系統,所以當時也有很多人遇到轉換問題,我今天也遇到相同問題,不過是在轉換到 Linux Centos 5.1 版本底下,原本機器使用 Red Hat Linux 7.3,真是一個很舊的版本,因為 Red Hat Linux 已經到 9.0 版本了,而且目前不維護了。
之前版本轉換都沒有什麼問題,就是 4.x 轉到 5.x 版本,參可我之前寫的這篇 [Mysql] 資料庫備份[big5]latin1轉換成utf-8,如果這篇文章解決不了的話,那就可能用我底下的方法了,不過過上面那個方法不適合用在 3.23 轉到 5.x 版,因為還是會發生亂碼現象,可是這只會發生在 Linux 底下,因為我用 FreeBSD 7.0 R 版,在這環境底下是沒有問題的,所以今天很囧,都在處理 Linux 的部份,哈哈,所以大家還是去用 FreeBSD 吧
今天看到 wordpress 已經 release 出 Version 2.5.1,大家可以去官網下載 wordpress 2.5.1,不過這次出來的,好像沒有解決 Wordpress 2.5 版本 RSS 摘要無法斷行,所以我又繼續用了大陸人寫的外掛 wp-CJK-excerpt,官方網有提供升級方法:官網複雜升級方法,其實我之前有寫一篇也是算是蠻笨的方法:[Wordpress] Upgrade 2.2.x to 2.5 無痛升級法 For Linux or FreeBSD,然後今天升級的時候,用幾個步驟就可以完成升級的動作了喔,底下就來看看我的升級方法。
今天突然想到要玩一下 Proftpd 的 MYSQL 虛擬帳號認證部份,我是用 FreeBSD 7.0 Release 下去安裝的,剛剛去看了一下官方網站,從 1.3.1rc1 版開始,支援 UTF-8 傳送跟接收了,請看 RELEASE_NOTES-1.3.1rc1,所以1.2.10版本之前的都不支援 UTF-8 不過台灣有人 patch 出來可以支援 Big5,現在都不用了,裡面有一段簡介
UseUTF8
Disables use of UTF8 encoding for file paths. If the --enable-nls
configure option is used, then UTF8 encoding support will be
enabled by default.
如果你的 server 是用此版本,或者是更高,請在編譯的時候加入 --enable-nls
--enable-nls
This configure option enables handling of translated message
catalogs for response messages, and [...]
最近在調整系統時間,所以我利用了 Ntpd 伺服器,來微調系統時間,如果不利用這個方式,那可以利用我之前寫的調整系統時間:[FreeBSD] 修改系統時間 UTC -> CST,然而 Ntpd 會用一份時間伺服器的清單來間歇的檢查系統時間,它會取得這些時間伺服器的平均值,然後漸漸的調整系統時間。
FreeBSD 啟用 Ntpd 的方式:
步驟一:建立 /etc/ntp 這個目錄
#
# 建立目錄
#
mkdir /etc/ntp
