小内存VPS安装lnmp的优化,你做了吗?

2015/07/03Linux服务器 标签:0

很多做站的朋友,可能为了避免国内麻烦的备案程序,和我一样购买和使用国外的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进行优化吧!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

18 + 5 = ?