• Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化


    对其用户和应用程序来讲,每一个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 
    详见: 
    -------------------------------------------------------------------------------- 
    二、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 
  • 相关阅读:
    python之连接oracle数据库
    从一副牌中随机抽一张牌
    判断一个点是否在圆内
    判断每个月有多少天
    猜数字游戏
    求一元二次方程的2个跟
    Servlet细节处理
    Servlet
    Http协议
    Struts2(2)
  • 原文地址:https://www.cnblogs.com/yyjie/p/7299132.html
Copyright © 2020-2023  润新知