首页|五四陈后院|百丁屋论坛 CNFLEX组织|md5破解|关于|Profile
  • 802.1x代码 | bbsdown代码 | php手册 | 技术资料翻译

    wordpress nginx php-cgi mysql在128m内存下的vps安装和优化手记[原创]

    字号:T|T

    [ 文章作者:陈臻 本文版本:v1.0 最后修改:2009.8.2 转载请注明原文链接:http://www.54chen.com/688-wordpress-nginx-php-cgi-mysql-memory-in-the-128m-to-install-and-optimize-the-vps-notes/ ]

    选取CentOS,因为它是号称最安全及性能都相对较好的Linux系统。系统内存128m,系统用掉30m,有100m左右可用(如图1所示),swap已经有256M,硬盘为5G,除去系统后大约有4G可供捣腾。


    图1。

     

    首先,在空白的系统上使用下面的命令,安装gcc等一堆工具和后面php会用到的一些包:

    yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

    yum这一堆东西会有点慢,这里正好插播一下,mysql的编译在128的内存下非常慢,所以呆会儿我们会采取直接yum,php、nginx都下源码编译,经过以往的经验eAccelerator、Xcache和Zend Optimizer这三者,最好是用eAccelerator搭配Zend Optimizer能给php加速得到最佳效果,当然了,Zend Optimizer需要Zend Guard来搭配,而后者是收费的,伟大的中国人有伟大的破解。

    我执行的时候耗时32分钟左右。

    言归正传,继续:
    wget http://sysoev.ru/nginx/nginx-0.7.61.tar.gz
    wget http://www.php.net/get/php-5.2.10.tar.gz/from/this/mirror
    wget http://blog.s135.com/soft/linux/nginx_php/phpfpm/php-5.2.10-fpm-0.5.11.diff.gz
    wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.9.tar.gz [nginx rewrite使用]

    【安装MySQL
    yum install -y mysql-server
    启动MySQL:
    service mysqld start
    设置mysql数据库root帐号密码:
    mysqladmin -u root password 'newpassword' [引号内填密码]
    让mysql更安全:
    mysql -u root -p [此时会要求你输入刚刚设置的密码,输入后回车即可]

    mysql> DROP DATABASE test; [删除test数据库]
    mysql> DELETE FROM mysql.user WHERE user = ”; [删除匿名帐户]
    mysql>DELETE FROM mysql.user WHERE password = ”;[删除无密码帐户]
    mysql> FLUSH PRIVILEGES; [重载权限]

    【优化MySQL】
    此时的mysql直接吃掉20m左右的内存,如图2所示。我们要对其进行优化,关掉innodb

    图2。

     

     

     

     

    vi /etc/my.cnf
    在后面增加如下内容:

    skip-innodb
    [mysql]
    no-auto-rehash

    [mysqld]
    user = mysql
    port = 3306
    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
    long_query_time = 1
    log_long_format
    server-id = 1
    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

    【重启MySQL】
    service mysqld restart
    再看mysql吃掉的内存,已经降低了四分之一,如图3所示:
    图3。

     

     

     

     

    【安装php】
    首先使用yum安装上mysql的开发包,供php扩展mysql使用:
    yum -y install mysql-devel
    安装patch工具:
    yum -y install patch
    tar zxvf php-5.2.10.tar.gz
    gzip -cd php-5.2.10-fpm-0.5.11.diff.gz | patch -d php-5.2.10 -p1
    cd php-5.2.10
    ./configure --prefix=/opt/php --with-config-file-path=/opt/php/etc --with-mysql=/usr/share/mysql --with-mysqli=/usr/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-gd --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --without-pear
    make && make install

    把pear手动装上(这个是5.2.10的一个bug,后面可能已经打补丁了):
    curl http://pear.php.net/go-pear | /opt/php/bin/php
    cp php.ini-dist /opt/php/etc/php.ini

    【安装eaccelerator】
    tar jxvf eaccelerator-0.9.5.3.tar.bz2
    cd eaccelerator-0.9.5.3
    /opt/php/bin/phpize
    ./configure --enable-eaccelerator=shared --with-php-config=/opt/php/bin/php-config
    make && make install

    mkdir -p /opt/eaccelerator_cache
    vi /opt/php/etc/php.ini

    添加下面的内容:
    [eaccelerator]
    zend_extension=”/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so”
    eaccelerator.shm_size=”64″
    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″

     

    【安装Zend Optimizer】
    要去zend.com上注册用户名后进download页面下载,这里太弱智了,不知道zend是否有专门的产品人员,这种注册下载有什么意义,只是一堆死账号而已。
    下载ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
    tar -zxvf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
    cd ZendOptimizer-3.3.3-linux-glibc23-i386
    ./install

    运行过程中会要求你写些安装路径啥的,照着写就是。
    如果出现类似下面的错误:
    ./install-tty: line 139: ./php: cannot execute binary file
    那说明你下错了包了,这种情况是因为你32位的系统下了64位的包或者是反过来。

    【安装nginx】
    tar -zxvf pcre-7.9.tar.gz
    cd pcre-7.9
    ./configure
    make && make install
    cd ..

    tar zxvf nginx-0.7.61.tar.gz
    cd nginx-0.7.61
    ./configure –user=www –group=www –prefix=/opt/nginx –with-http_stub_status_module –with-http_ssl_module
    make && make install

    增加www用户:
    groupadd www
    useradd -g www www

    【优化php\nginx】
    1.优化php-fpm.conf
    vi /opt/php/etc/php-fpm.conf
    修改log level为error:
    error
    修改max_children:
    5
    修改listen_address为unix socket方式运行:
    /tmp/php-cgi.sock

    2.优化nginx.conf
    vi /opt/nginx/conf/nginx.conf
    在events中增加:
    use epoll;
    在http中增加下面的代码,打开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;
    在使用php的server中使用unix socket通信方式:
    fastcgi_pass unix:/tmp/php-cgi.sock;

    【设置开机启动】
    /sbin/chkconfig –add mysqld [在服务清单中添加mysql服务]
    /sbin/chkconfig mysqld on [设置mysql服务开机启动]

    vi /etc/rc.locale
    加入两行:
    /opt/php/sbin/php-fpm start
    /opt/nginx/sbin/nginx

    【误区提示】
    XEN更像物理服务器,会尽量把剩余的内存当成buffer和cache,所以看到下图的时候不要惊慌,其实内存都在cache里了。
    图4

     

     

    【wordpress专项优化】
    使用wp-super-cache插件,将页面生成html,省去php的开销,性能有提升。
    对照access log,刷新页面,看堵在什么地方

    【几个建议】
    合并css js个数 并且压缩 速度提升明显
    wordpress没有任何插件的时候,效率是很不错的,但是有些不负责任的插件会导致整体看起来很慢,下面是一些常用的插件的问题:
    1.twitter tools插件:用来从后端取twitter数据的,这个插件搞了一个js一个css在head里,并且都是通过php生成的,两个php请求,让首页很慢。建议去掉(可能会影响自动化?没来得及分析细节)。
    2.wp-spamfree插件:用来做antispam的,这是一个动态生成的js,不知道为什么非常慢。建议换别的插件。

    【结果展示】
    在完成上述一系列的操作后,http://54chen.com 我是陈科学院的打开速度已经非常迅速了,基本上一秒钟就能全部显示。内存还有40m空闲,如图5所示:
    图5


    原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]
    本文链接: http://www.54chen.com/architecture/wordpress-nginx-php-cgi-mysql-memory-in-the-128m-to-install-and-optimize-the-vps-notes.html

    相关阅读:

    分类: 架构   Tags: , , ,

    [五四陈科学院出品]

    网友评论:

      32条评论

      • At 2009.08.02 15:40, 江江 said:

        测试顶一个

        • At 2009.08.03 16:22, 金山老罗 said:

          友情顶贴

          • At 2009.08.05 21:54, cc0cc said:

            老罗驾到 哈哈

          • At 2009.08.05 21:22, zhu said:

            发现有验证码了,是不是树大招风了 ^-^

            • At 2009.08.05 21:51, cc0cc said:

              一直就有国外的垃圾机器人来发广告呢,这次优化把原来看不倒的基于cookies的antispam插件换成现在这个了,原来的太慢了。冒似这个验证码非常难认

              • At 2009.08.11 10:45, 美国VPS推荐 said:

                我好几个WP的blog整天遭受国外垃圾评论骚扰,不错都被屏蔽,嘿嘿

                • At 2009.08.11 15:55, cc0cc said:

                  兄弟你再用这个名字我就要删除了哈

                  • At 2010.01.06 15:18, ss said:

                    ss

              • At 2009.08.18 03:04, 王猛 said:

                hi,朋友。
                我们是不是邻居呢?
                我和你是同一间公司的VPS,我在硅谷机房。
                我是一台256M的VPS,我用的是Ubuntu 9.04这个系统。
                我的整个配置都是自己编译而来的,使用了intel c++这个编译器。
                从CentOS 5.1全部yum来的apache mysql php,只能承受162个攻击。
                而在我自行编译配置后,已经可以达到600次攻击的水准。
                我想说的是,这个nginx的配置里有一个问题。目前,客户基本上都是XP系统,而这个系统是IE6作为默认浏览器。IE6支持HTTP 1.1标准。
                配置上,写的1.0.
                nginx的处理过程是当客户以1.1协议访问时,进行缓存。当客户以1.0访问时,丢弃原来的1.1缓存,重新生成;当1.1客户来访时,1.0缓存又一次丢失,再重新生成。 -_-
                考虑1.1用的人多余1.0,因此最好改为1.1。

                • At 2009.09.02 22:22, hnws said:

                  请问你开了多少个 php_cgi 的进程 ?

                  • At 2009.09.03 18:27, cc0cc said:

                    5个 效果还行

                  • At 2009.09.04 01:20, 惑者 said:

                    我也在用 rashost 的128VPS,不过用的Ubuntu9.04
                    同样也安装了Nginx Wordpress,其中Nginx是编译的,其他都是aptitude的
                    不过mysql 一起来内存就被吃光了,虚存都被吃了一半
                    访问页面比蜗牛还慢,不知道是配置问题还是安装的包不对
                    看到这个帖子,要仔细学习下,希望站长多指教

                    • At 2009.09.04 12:04, cc0cc said:

                      mysql的innodb引擎比较吃内存 可以关掉 方法见正文
                      默认的php-cgi模块比较多 也比较吃内存 建议自己编译

                      • At 2009.09.04 14:38, 惑者 said:

                        我遇到个比较奇怪的现象,通过aptitude 安装mysql-server-5.0之后
                        启动正常,然后我开始按照本博文的介绍修改配置文件
                        restart显示失败,然后我将原来的配置文件恢复,依旧显示失败
                        请问看哪个log能够帮助判断出问题所在?

                        • At 2009.09.04 16:14, cc0cc said:

                          你可以看看 /var/log/mysqld.log
                          不确定这个路径是否一定在

                    • At 2009.09.19 17:46, unixhater said:

                      你好,我根据你的配置一步步来安装,发现一些错误

                      mysql删用户的命令有中文
                      安装ea时,php.ini设置中的引号带中文,还有目录写错了(貌似这配置与张宴那篇神似^_^)
                      nginx的configure时有中文会出错

                      另外我在pear,ZendOptimizer安装,与nginx,php-fpm用户设置时碰到点小问题,不过都解决了。

                      • At 2009.09.19 23:35, cc0cc said:

                        呵呵 兄弟真是细心
                        这个blog系统比较原始 以至于半角的东西全被自动转成了全角 不知道有什么好的插件可以解决这个问题不

                      • [...] 第二部分wordpress nginx php-cgi mysql在128m内存下的vps安装和优化手记[原创]千橡、校内网、人人网急聘 Flash AS3工程师、Social Game [...]

                        • [...] 此时再修改php-fpm.conf 将user group都修改成root(经过上面的修改php-fpm已经支持root了)。 [...]

                          • At 2009.11.04 20:39, 比卡超 said:

                            请问CentOS是什么版本呢???

                            • At 2009.11.05 09:29, cc0cc said:

                              redhat.com发布redhat 9(简写为rh9)后,不再开发redhat 10,11…,全面转向redhat enterprise linux(简写为rhel)的开发,和以往不同的是,新的rhel 3要求用户先购买lisence,redhat.com承诺保证产品的稳定性,安全性。rhel 3二进制代码不再提供下载,而是作为redhat 服务的一部分,但源代码依然是open。所以有了centos ,whitebox,dao 等等一批open source的企业版本,其中centos最为活跃。
                              –你可以多用用搜索引擎的

                              • At 2009.11.07 01:57, 比卡超 said:

                                可能你误会了。。我找到的Cent有1.0~5.x版本。请问你是安装哪个?

                                • At 2009.11.07 21:57, cc0cc said:

                                  哈哈,果真是误会了
                                  我的是4.x版本的

                            • At 2009.11.14 14:43, hnws said:

                              我的256M的VPS上系统是Fedora 11,php和php-cgi和spwan-php是使用源里的包。
                              已经将php-cgi的数量改为3个。
                              但是一直两个左右php-cgi每个占用大概50M的内存。
                              请问这大概是怎么回事?我是否需要提供进一步信息?
                              我在google上找了许久都没有类似的情况。

                              • At 2009.11.14 20:26, cc0cc said:

                                php-cgi应该不是很吃内存吧,你尝试通过源码编译,尽可能减少所支持的扩展可以得到改善

                              • At 2009.11.27 18:44, shiny said:

                                我用的也是rashost的128M的VPS~
                                在swap使用较多的时候速度明显变慢~~
                                php-cgi进程大概占30MB左右,不得不改少进程数。
                                3个还能稳定运行~
                                考虑升级内存ing

                                • [...] 为人人设计的分布式key-value系统架构[原创]wordpress nginx php-cgi mysql在128m内存下的vps安装和优化手记[原创][十一归来]ubuntu 9.10 [...]

                                  • [...] wordpress nginx php-cgi mysql在128m内存下的vps安装和优化手记[原创] (27) [...]

                                    • [...] 半年最受欢迎的 [十一归来]ubuntu 9.10 硬盘安装手记为人人设计的分布式key-value系统架构[原创]wordpress nginx php-cgi mysql在128m内存下的vps安装和优化手记[原创][科学院手记]人人网新鲜事分享现场转播[原创]使用postgreSQL+bamboo搭建比lucene方便N倍的全文搜索 第二部分[原创]mediawiki安装改进手记-使用mediawikit和postgresql搭建有强大搜索功能的wikiLinkIn基于Dynamo设计的系统:伏地魔(voldemort)设计中文文档[我是陈科学院译]-完稿千橡、校内网、人人网急聘 Flash AS3工程师、Social Game 游戏策划x200 ntfs硬盘安装ubuntu9.10正式版手记用java并发测试tokyo cabinet的性能[五四陈手记] [...]

                                      • [...] 解读PHP开源项目中列表和hook方法:while(has_items()): thme_ite();和apply_filters 2010年02月08日 17:23五四陈科学院-php与java科学院我要评论(0) 字号:T|T 在wordpress,lilina等开源项目中,常常会看到一些莫名的代码,来无影去无踪,看上去很有意味,特地拿来分析分析,看看一般的作法。 [...]

                                        • [...] wordpress nginx php-cgi mysql在128m内存下的vps安装和优化手记[原创] [...]

                                          • [...] 一个WEB服务器,跑nginx 0.6。前端一squid 2.6代理。用户访问先经过squid。 [...]

                                            (Required)
                                            (Required, will not be published)

                                          推广信息