很多做站的朋友,可能为了避免国内麻烦的备案程序,和我一样购买和使用国外的VPS,有很多新手对国外VPS的使用了解太少,虽然买了个512M内存的VPS或者256M内存的VPS,总觉得速度不行或者经常出现502错误等问题,那么今天就由我来告诉你,购买VPS后,要如何进行优化才能发挥VPS最大的性能。当然,购买后我建议大家都使用lnmp,而不要使用什么iis以及apache之类的服务器软件,因为小内存VPS使用iis以及apache的话你会觉得内存占用太大。
1.优化CPU
先来优化CPU吧,使用命令cat /proc/cpuinfo看看自己的CPU是几核的,Linode虽然内存给的不多,但是CPU还是挺实在的,我这服务器的CPU是4核的,使用该命令可以看到processor 0,1,2,3。
确定了CPU之后,在Nginx的配置文件中写入如下这样两行:
view plaincopy to clipboardprint?
worker_processes 4
worker_cpu_affinity 0001 0010 0100 1000
这两行的意思是说,开启4个工作进程,并同时启用CPU的4个核心,这样能加快Nginx的响应速度。之后可以用top命令来验证,是不是开启了4个CPU在工作。
2. 在events中开启epoll。
events{
use epoll;
}
Epoll事件模型是Nginx之所以优于Apache的杀手锏技术,但只有在Linux 2.6及以上内核中才可采用,如果内核是2.6以上的,一定要打开。
3. 设定Nginx文件句柄数,使用ulimit -n得到文件查看数限制,设置到worker_rlimit_nofile中,我的系统中是1024。
view plaincopy to clipboardprint?
worker_rlimit_nofile 1024
4. 设定连接数worker_connections:
view plaincopy to clipboardprint?
events{
worker_connections 1024;
}
根据Nginx的理论计算公式:最大连接数=worker_processes*worker_connections/4,因此,本例中的计算结果应该是:
最大连接数=4*1024/4=1024
所以,如果要设置max_clients的话,可将其设置为1024。我这是小内存Server,内存充足的话,设置成8000-10000也没问题的。
view plaincopy to clipboardprint?
events{
max_clients 1024;
}
5. 在某些情况下(具体可参考 wiki.nginx.org),Nginx 内部重定向规则会被启动。如:当 URL 指向一个目录并且在最后没有包含“/”时,Nginx 内部会自动的做一个 301的重定向,这时会有两种情况:
server_name_in_redirect on(默认),URL 重定向为: server_name 中的第一个域名 + 目录名 + /;
server_name_in_redirect off,URL 重定向为: 原 URL 中的域名 + 目录名 + /。
这里建议设置成off:
server_name_in_redirect off
6. 设置server_names_hash_bucket_size:保存服务器名字的hash表是由指令 server_names_hash_max_size和 server_names_hash_bucket_size所控制的。参数hash_bucket_size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果hash_bucket_size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大hash_max_size 或 hash_bucket_size的提示,那么首要的是增大前一个参数的大小。这里直接给出结果吧:
view plaincopy to clipboardprint?
server_names_hash_bucket_size 128;
7. 隐藏Nginx版本号,设置server_tokens:
server_tokens off;
8. 设置client_header_buffer_size和large_client_header_buffers。Nginx中经常出现难以查找原因的400错误,主要是这两个配置造成的,配置这两项:
view plaincopy to clipboardprint?
client_header_bufffer_size 32k;
large_client_header_buffers 4 32k;
9. 设置客户端通过Nginx提交文件的最大尺寸:
client_max_body_size 8m;
我这里写的是8M,足够上传照片了,如果还嫌不够,可以修改成32M。
10. 打开sendfile:
sendfile on;
11. 禁止TCP Push:
tcp_nopush on;
该指令用于在FreeBSD或Linux系统上允许/禁止使用TCP PUSH标志位,仅当sendfile on开启时有效。
12. 设置keepalive超时时间
view plaincopy to clipboardprint?
keepalive_timeout 60;
该指令用于设置keepalive会话超时时间,默认为75秒。
13.设置tcp_nodelay
tcp_nodelay on;
该指令用于允许或禁止Socket中的TCP延时。
14. 设置client_body_timeout
view plaincopy to clipboardprint?
client_body_timeout 10;
该指令用于客户端的读取操作超时时间。
其他设置:
view plaincopy to clipboardprint?
output_buffers 1 32k;
postpone_output 1460;
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 32k;
fastcgi_buffers 4 32k;
fastcgi_busy_buffers_size 32k;
fastcgi_temp_file_write_size 32k;
gzip on;
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_proxied expired no-cache no-store private auth;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=staticfilecache:80m inactive=1d max_size=2500m;
proxy_temp_path /var/lib/nginx/proxy;
proxy_connect_timeout 300;
proxy_read_timeout 120;
proxy_send_timeout 120;
proxy_buffer_size 16k;
proxy_buffers 4 16k;
最后,一定要优化php-fpm,以上的优化你可以不做,但是以下的优化你必须做。
再来优化PHP-FPM,打开/usr/local/php/etc/php-fpm.conf,这个文件和PHP的语法很相似,凡是需要激活的配置,直接删掉前面的分号(;)即可:
view plaincopy to clipboardprint?
[global]
pid = run/php-fpm.pid
process_control_timeout=5
[www]
listen.allowed_clients = 127.0.0.1
user=www-data
group=www-data
pm=dynamic
pm.max_children=20(一般情况,每增加1,则内存使用会增加20M。256M的VPS建议设置为10,512M的VPS建议设置为20)
pm.max_requests=10000(并发数越大,此请求数应越大)
pm.start_servers =10(初始php-fpm进程数)
emergency_restart_threshold = 60
emergency_restart_interval = 60s
上边这两个,表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。
学问却是太大了,有的时候连我自己都会忘记很多设置,如果你也使用VPS,那么赶快给你的VPS进行优化吧!