Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小記憶體VPS伺服器上的配置最佳化[原創]

來源:互聯網
上載者:User

[文章作者:張宴 本文版本:v1.0 最後修改:2008.10.28 轉載請註明原文連結:http://blog.s135.com/post/375/]

   VPS(全稱Virtual Private Server)是利用最新虛擬化技術在一台物理伺服器上建立多個相互隔離的虛擬私人主機。它們以最大化的效率共用硬體、軟體許可證以及管理資源。對其使用者 和應用程式來講,每一個VPS平台的運行和管理都與一台外掛式主控件完全相同,因為每一個VPS均可獨立進行重啟並擁有自己的root存取權限、使用者、IP地 址、記憶體、過程、檔案、應用程式、系統函數庫以及設定檔。

  VPS伺服器最重要的指標就是記憶體大小,多個VPS伺服器可以共用一顆CPU,但不能共用同一塊記憶體。記憶體越大,價格越貴。

  下面,以我的部落格所在的VPS為例,介紹在128M記憶體下對 Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 的最佳化。

  至於 Nginx + PHP + MySQL 的安裝配置,可參見:《Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建勝過Apache十倍的Web伺服器(第4版) 》

  最佳化後的效果:

   提供HTTP服務的1個Nginx進程佔用11M實體記憶體,5個PHP-cgi進程每個佔用8M左右實體記憶體,1個MySQL伺服器佔用7M實體記憶體, 加上兩個佔用記憶體不大的Nginx和PHP-cgi父進程,Nginx + PHP + MySQL 系列總共只佔用47.7%的實體記憶體,即62M實體記憶體(128M * 47.7% ≈ 62M)。

  

  另外,VPS伺服器系統自身和其它程式也會使用一些記憶體,但128M記憶體的VPS已經夠用。總體而言,經過最佳化後,128M記憶體的VPS跑 Nginx + PHP + MySQL 效果不錯。當然,如果有Money購買更大記憶體的VPS,就更好了。

  最佳化項如下:

  一、增加256M的swap分頁檔
  1、建立並啟用swap分頁檔

cd /var/
dd if=/dev/zero of=swapfile bs=1024 count=262144
/sbin/mkswap swapfile
/sbin/swapon swapfile

  2、加到fstab檔案中讓系統引導時自動啟動

vi /etc/fstab

在末尾增加以下內容:

引用/var/swapfile swap swap defaults 0 0

  詳見:http://blog.s135.com/post/374.htm

  二、Nginx 0.7.19 的主設定檔(nginx.conf)最佳化

引用user  www www;

#Nginx每個進程耗費10M~12M記憶體,這裡只開啟一個Nginx進程,節省記憶體。
worker_processes 1;

error_log  /data1/logs/nginx_error.log  crit;

pid        /usr/local/webserver/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
use epoll;
worker_connections 51200;
}

http
{
include       mime.types;
default_type  application/octet-stream;

#charset  gb2312;
    
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
    
sendfile on;
tcp_nopush     on;

keepalive_timeout 60;

tcp_nodelay on;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

#對網頁檔案、CSS、JS、XML等啟動gzip壓縮,減少資料轉送量,提高訪問速度。
gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone  crawler  $binary_remote_addr  10m;

server
{
   listen       80;
   server_name  blog.s135.com www.s135.com s135.com *.s135.com;
   index index.HTML index.htm index.PHP;
   root  /data0/htdocs/blog;

   #limit_conn   crawler  20;    

   #針對Bo-Blog系統的Rewrite靜態化
   rewrite ^/post/([0-9]+).htm$ /read.PHP?$1 last;
   rewrite ^/post/([0-9]+)_([0-9]+).htm$ /read.PHP?$1&page=$2 last;
   rewrite ^/post/([0-9]+)_([0-9]+)_([0-9]+).htm$ /read.PHP?$1&page=$2&part=$3 last;
   rewrite ^/index_([0-9]+)_([0-9]+).htm$ /index.PHP?mode=$1&page=$2 last;
   rewrite ^/star_([0-9]+)_([0-9]+).htm$ /star.PHP?mode=$1&page=$2 last;
   rewrite ^/category_([0-9]+).htm$ /index.PHP?go=category_$1 last;
   rewrite ^/category_([0-9]+)_([0-9]+)_([0-9]+).htm$ /index.PHP?go=category_$1&mode=$2&page=$3 last;
   rewrite ^/archive_([0-9]+)_([0-9]+).htm$ /index.PHP?go=archive&cm=$1&cy=$2 last;
   rewrite ^/archive_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).htm$ /index.PHP?go=archive&cm=$1&cy=$2&mode=$3&page=$4 last;
   rewrite ^/showday_([0-9]+)_([0-9]+)_([0-9]+).htm$ /index.PHP?go=showday_$1-$2-$3 last;
   rewrite ^/showday_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+)_([0-9]+).htm$ /index.PHP?go=showday_$1-$2-$3&mode=$4&page=$5 last;

   location ~ .*\.(PHP|PHP5)?$
   {
     #將Nginx與FastCGI的通訊方式由TCP改為Unix Socket。TCP在高並發訪問下比Unix Socket穩定,但Unix Socket速度要比TCP快。
     fastcgi_pass  unix:/tmp/PHP-cgi.sock;
     #fastcgi_pass  127.0.0.1:9000;
     fastcgi_index index.PHP;
     include fcgi.conf;
   }

   location ~ /read.PHP
   {
     #將Nginx與FastCGI的通訊方式由TCP改為Unix Socket。TCP在高並發訪問下比Unix Socket穩定,但Unix Socket速度要比TCP快。
     fastcgi_pass  unix:/tmp/PHP-cgi.sock;
     #fastcgi_pass  127.0.0.1:9000;
     fastcgi_index index.PHP;
     include fcgi.conf;
   }
  
   #部落格的圖片較多,更改較少,將它們在瀏覽器本機快取15天,可以提高下次開啟我部落格的頁面載入速度。
   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
   {
     expires      15d;
   }

   #部落格會載入很多javascript、CSS,將它們在瀏覽器本機快取1天,訪問者在看完一篇文章或一頁後,再看另一篇檔案或另一頁的內容,無需從伺服器再次下載相同的javascript、CSS,提高了頁面顯示速度。
   location ~ .*\.(JS|css)?$
   {
     expires      1d;
   }  

   log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
   access_log  /data1/logs/access.log  access;
   }
}

  三、PHP 5.2.6(FastCGI)的配置最佳化
  1、PHP.ini 設定檔中關於eAcelerator的最佳化。只使用1M共用記憶體,刪除所有在最後3600秒內無法存取的指令碼緩衝,用磁碟輔助進行緩衝。

引用[eaccelerator]
zend_extension="/usr/local/webserver/PHP/lib/PHP/extensions/no-debug-non-zts-20060613/eaccelerator.so"
eaccelerator.shm_size="1"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys = "disk_only"
eaccelerator.sessions = "disk_only"
eaccelerator.content = "disk_only"

  2、PHP-fpm.conf 的配置最佳化
  修改兩項,一是修改以下一行,將啟動的PHP-cgi進程數由原來的128個改為5個:

引用<value name="max_children">5</value>

  二是修改以下一行,將TCP模式改為Unix Socket模式:

引用<value name="listen_address">/tmp/PHP-cgi.sock</value>

  四、MySQL 5.1.26 配置最佳化
  1、使用以下參數編譯安裝的 MySQL 5.1 預設支援4種儲存引擎:CSV、MRG_MYISAM、MEMORY、MyISAM,不支援InnoDB儲存引擎。由於記憶體有限,而InnoDB耗費的記憶體較大,這裡推薦使用MyISAM儲存引擎。

./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
make && make install

  2、MySQL 5.1 設定檔(my.cnf)最佳化

引用[client]
port    = 3306
socket  = /tmp/mysql.sock

[mysql]
prompt="(\u:s135:)[\d]> "
no-auto-rehash

[mysqld]
user    = mysql
port    = 3306
socket  = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /usr/local/webserver/mysql/data
open_files_limit    = 600
back_log = 20
max_connections = 100
max_connect_errors = 200
table_cache = 60
external-locking = FALSE
max_allowed_packet = 16M
sort_buffer_size = 128K
join_buffer_size = 128K
thread_cache_size = 10
thread_concurrency = 8
query_cache_size = 0M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default_table_type = MyISAM
thread_stack = 192K
transaction_isolation = READ-UNCOMMITTED
tmp_table_size = 512K
max_heap_table_size = 32M
/usr/local/webserver/mysql/data/slow.log
/usr/local/webserver/mysql/data/error.log
long_query_time = 1
log_long_format
server-id = 1
#log-bin = /usr/local/mysql/data/binlog
binlog_cache_size = 2M
max_binlog_cache_size = 4M
max_binlog_size = 512M
expire_logs_days = 7
key_buffer_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 2M
bulk_insert_buffer_size = 2M
myisam_sort_buffer_size = 4M
myisam_max_sort_file_size = 10G
myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover

[mysqldump]
quick
max_allowed_packet = 16M

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.