wordpress网站优化 由于图便宜,买了一个就128M内存的vps。所以非常关注性能的问题。 性能主要是3点,php和mysqly以及wordpress本身的静态化。 mysql的部分网上很多都有所有说到了,不启动innodb,限制binlog cache, 限制sort buffer等等。具体可以参见如下


[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
skip-innodb

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

php的部分。 使用fastcgi, 前端使用nginx来进行fastcgi代理。 fastcgi使用的php-fpm。 使用php-fpm要特别注意如下设置:

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
;   dynamic - the number of child processes are set dynamically based on the
;             following directives:
;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
; Note: This value is mandatory.
pm = dynamic

; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes to be created when pm is set to 'dynamic'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI.
; Note: Used when pm is set to either 'static' or 'dynamic'
; Note: This value is mandatory.
pm.max_children = 50

; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 2

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 1

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 2

不然我的小内存vps很快就会挂的。 listen的部分使用sock的方式,毕竟都是本机,而且sock的速度要比tcp要来的快的多。


listen = /var/run/phpfpm.sock

以上就是php的部分。 下面是nginx的部分 开启fastcgi cache

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 64k;
fastcgi_temp_file_write_size 64k;
fastcgi_cache_path /opt/server/nginx/fastcgi_cache_dir levels=1:2 keys_zone=cache_fastcgi:128m inactive=1d max_size=1g;

fastcgi_cache cache_fastcgi;
fastcgi_cache_valid 200 302 301 1h;
fastcgi_cache_valid any 1m;
fastcgi_cache_min_uses 1;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_cache_key $request_method://$host$request_uri;

静态文件过期时间

location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
}

gzip压缩 由于这个vps不光内存少,1个月的带宽也少,那能减少传输就减少一点。

    gzip on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types text/plain text/xml text/css application/x-javascript;

wordpress本身的优化 使用wp-super-cache插件,这个插件可以把动态的php转换成静态的html代码,这样减少了很多fastcgi的压力,其实这个是最根本的解决方法。而且这些html又被缓存到了nginx中,这样访问的速度就会非常非常的快了。

One thought on “小内存vps上wordpress优化

  1. 感谢博主分享,受教良多。
    我觉得,如果博客访问量不是特别大,小内存VPS就很好,比如256MB甚至128MB。
    256MB这种小内存的VPS经过适当的优化,每天10000PV的流量应该是没有问题的。
    因为博主目前用的搬瓦工256MB的VPS,模拟5分钟内100个在线完全没问题。
    测试页面:http://www.seoimo.com/wordpress-vps/
    可以看到,页面有大量的图片和文字。倘若一般的博客页面只有很少图片的话,想必每天的流量再多点应该也没问题。
    所以说,小内存VPS不一定就不适合建大站,关键是要优化合理。
    P.S. 以上本人建站经历,供参考。

Share Your Thought