小内存VPS LNMP配置优化

一、Nginx配置

1、nginx运行的进程数,一般设置成和CPU的核数相同。

worker_processes 1;

2、worker_rlimit_nofile是nginx能打开文件的最大句柄数。

worker_rlimit_nofile 40960;

3、nginx进程所允许的最大的连接数,max_clients = worker_processes * worker_connections。

worker_connections 10240; 

4、设置连接超时时间为60。

keepalive_timeout 60;

5、该指令用于开启或关闭gzip模块(on/off)

gzip on;

6、设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。

gzip_min_length 1k;

7、设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。

gzip_buffers 4 16k;

8、识别http的协议版本(1.0/1.1)

gzip_http_version 1.1;

9、gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

gzip_comp_level 2;

10、匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。

gzip_types text/xml text/css text/javascript application/x-javascript application/xml;

11、和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩

gzip_vary on;

二、php-fpm配置

以下配置是在pm = dynamic模式下的配置。
1、php-fpm子进程副本创建的最大数,创建的越多并发能力越强。同时修改空闲时进程数pm.min_spare_servers和pm.max_spare_servers,不能比pm.max_children大。

pm.max_children = 8;

2、接收多少次请求后重新建立php-fpm子进程。

pm.max_requests = 2000

dynamic这种模式很像apache的prefork方式。
3、设置php脚本最大执行时间。

request_terminate_timeout = 100

一个nginx进程要占5~10MB内存,一个php-fpm进程要占15~25MB左右的内存。

三、Mysql配置优化

1、key_buffer 是优化性能的重要参数,用来缓存 tables keys 和 indexes,增加这个值可以更好的处理索引,读和写都需要索引。这里设设置成 256K 足够了

key_buffer = 16k

2、table_cache 是所有线程打开的表的数量,增加值可以增大 MySQL 的文件描述符数量,避免频繁的打开表,原始 my-small.cnf 中 table_cache 设置成4有点小,
#一个 wordpress 的页面通常会涉及到10个左右的表,其他的程序比如 Drupal,MediaWiki 会涉及到更多,将table_cache改为8。

table_cache = 8

3、max_connections 是数据库最大的连接数量,可以根据自己博客/网站的访问量来定这个值。如果博客/网站经常出现:Too many connections 错误的信息说明需要增大 max_connections 的值。

max_connections = 16

4、hread_concurrency 是最大并发线程数,通常设置为 CPU核数量×2,在 VPS 宿主机上如果服务器有2颗物理 CPU,而每颗物理 CPU 又支持 H.T 超线程(一个处理器上整合了两个逻辑处理器单元),所以实际取值为4 × 2 = 8。

thread_concurrency = 2

5、对于博客/新闻网站来说,用得最多的就是查询,所以需要加入 query cache 的设置。query_cache_size 是执行查询所使用的缓冲大小。

query_cache_limit = 256K
query_cache_size = 4M

6、thread_stack 用来存放每个线程的标识信息,如线程 id,线程运行时环境等,可以通过设置 thread_stack 来决定给每个线程分配多大的内存。

thread_stack = 64K

#
7、sort_buffer_size是每个需要排序的线程分配的缓冲区大小,增加该值可以加速 order by 和 group by 的操作。注意:该参数是以每个连接分配内存,也就是说,如果有16个连接,sort_buffer_size 为 64K,
那么实际分配的内存为:16 × 64K = 1MB。如果设置的缓存大小无法满足需要,MySQL 会将数据写入磁盘来完成排序。因为磁盘操作和内存操作不在一个数量级,所以 sort_buffer_size 对排序的性能影响很大。

sort_buffer_size = 256K

8、read_buffer_size 是顺序读取数据时的缓冲区大小,与 sort_buffer_size 一样,该参数分配的内存也是以每连接为单位的。read_buffer_size 是用来当需要顺序读取数据的时候,如无发使用索引的情况下的全表扫描,
#全索引扫描等。在这种时候,MySQL 按照数据的存储顺序依次读取数据块,每次读取的数据快首先会暂存在 read_buffer_size 中,当 buffer 空间被写满或者全部数据读取结束后,再将 buffer 中的数据返回给上层调用者,以提高效率。

read_buffer_size = 256K

9、read_rnd_buffer_size 是随机读取数据时的缓冲区大小,与顺序读相对应。

read_rnd_buffer_size = 256K

10、net_buffer_size 用来存放客户端连接线程的连接信息和返回客户端的结果集的缓存大小。当 MySQL 接到请求后,产生返回结果集时,会在返回给请求线程之前暂存在在这个缓存中,等积累到一定大小的时候才开始向客户端发送,
#以提高网络效率。不过,net_buffer_size 所设置的仅仅只是初始大小,MySQL 会根据实际需要自行申请更多的内存,但最大不会超过 max_allowed_packet。

net_buffer_length = 2K

四、PHP配置优化
1、开启php gzip压缩。这里和nginx gzip压缩的东西不同,nginx是压缩html,css,javascript。php gzip是用来压缩php。

zlib.output_compression = On
zlib.output_compression_level = 5

2、修改php脚本使用的最大内存数。

memory_limit = 32M
JackSun

JackSun

I'm a coder.

You may also like...

No Responses

  1. 陈雨萌 says:

    非常高兴遇到这么好的文章 谢谢

Leave a Reply

Your email address will not be published.