Skip to content

小小前端

明月本无心,行人自回首。

Menu
  • 前端开发
  • 编程技术
  • SQL语句
  • Linux
  • 生活/旅行
  • JSEditor
  • MiniBarCMS
  • About
  • 隐私政策
Menu

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

Posted on 2015年7月3日 by king2088

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

发表评论 取消回复

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

分类

近期文章

  • cordova-plugin-camera在某些android机型中拍照或选择文件时闪退出错的解决办法 2019年10月24日
  • JavaScript nodeJS base64加密解密url参数 2019年10月15日
  • 利用expressJS编写reset api 2019年4月13日
  • angular4 + http拦截器 2019年3月21日
  • ionic navCtrl.pop如何传递参数给上一个页面 2018年11月16日
  • ionic3搭建开发/测试环境 2018年10月25日
  • ionic2、3双击硬件back按键退出应用 2018年10月24日
  • VMware安装Mac OS High Sierra 10.12及高版本无法全屏 2018年8月24日

近期评论

  • 手表资讯发表在《ReactJS环境搭建》
  • king2088发表在《ionic中使用热更新插件cordova-hot-code-push》
  • 重阳节的诗句发表在《常用的sql语句》
  • 新郎致辞发表在《PHP代码实现WordPress相关文章的几种方法》
  • 霸道总裁发表在《vsftpd 提示 unrecognized service 解决办法》

归档

标签

Ajax Android Angular APP Cordova CSS css3 express html5 ionic Java javascript jQuery Linux loading mac Mac OS mongodb MySQL node nodejs PHP react SQL SSH VirtualBox vue vue-cli win10 WordPress WP REST API 主题 兼容性 前端 备份 插件 数据库 数组 服务器 正则表达式 浏览器 热更新 目录 组件 错误
2023年 3月
一 二 三 四 五 六 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    
© 2023 小小前端 | Powered by Superbs Personal Blog theme