当前位置:8090社团 >系统管理 > 查看文章
阿里云优惠码

一、优化思路

二、nginx优化配置


//nginx层面, 修改nginx.conf中配置

增加work_rlimit_nofile和worker_connections数量,并禁用keepalive_timeout。

worker_processes 2; //CPU个数
worker_cpu_affinity 00000001 00000010;  //开启CPU绑定
worker_rlimit_nofile 65535;   //子进程允许打开的文件数
keepalive_timeout 0;          //结束响应后立即断开tcp连接。
//keeplive_timeout表示tcp完成响应后,继续保持连接多久。如果这个值过大,会造成资源无效占用。
events{

    use epoll;
    worker_connections 20000;
    multi_accept on;
}

 

//系统层面

echo 500000 > /proc/sys/net/core/somaxconn  //设置最大连接数
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle  //加快tcp回收
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse    //空的tcp允许回收利用
echo 0 > /proc/sys/net/ipv4/tcp_syncookies  //关闭洪水抵御

ulimit -n 30000

内核参数优化

也可以直接使用优化后的配置,在/etc/sysctl.conf中加入:

net.core.somaxconn = 20480
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_max_syn_backlog = 16384
net.core.netdev_max_backlog = 20000
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_orphans = 131072
net.ipv4.tcp_syncookies = 0

 


三、nginx&php-fpm优化配置

nginx将请求转发给php-fpm处理,当nginx转发很多请求时,php-fpm进程不够用,就会生成子进程。
然而生成子进程需要内核来调度,比较耗时。
如果网站并发比较大,可以用静态方式一次性生成多个子进程,保持的内存中。

//修改phjp-fpm.conf
pm=static //让php-fpm进程始终保持,不需要动态生成
pm.max_children=32 始终保持的子进程数量

 

 

四、php&mysql优化

1.与Nginx使用Unix域Socket通信(Nginx和php-fpm在同一台服务器)

Unix域Socket因为不走网络,的确可以提高Nginx和php-fpm通信的性能,但在高并发时会不稳定。

Nginx会频繁报错:connect() to unix:/dev/shm/php-fcgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream

可以通过下面两种方式提高稳定性:
1)调高nginx和php-fpm中的backlog
配置方法为:在nginx配置文件中这个域名的server下,在listen 80后面添加default backlog=1024。
同时配置php-fpm.conf中的listen.backlog为1024,默认为128。
2)增加sock文件和php-fpm实例数
再新建一个sock文件,在Nginx中通过upstream模块将请求负载均衡到两个sock文件背后的两套php-fpm实例上。

 

2.php-fpm参数调优

pm = dynamic; 表示使用哪种进程数量管理方式

dynamic表示php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证多余的进程数不多于pm.max_spare_servers

static表示php-fpm进程数是静态的, 进程数自始至终都是pm.max_children指定的数量,不再增加或减少

pm.max_children = 300; 静态方式下开启的php-fpm进程数量
pm.start_servers = 20; 动态方式下的起始php-fpm进程数量
pm.min_spare_servers = 5; 动态方式下的最小php-fpm进程数量
pm.max_spare_servers = 35; 动态方式下的最大php-fpm进程数量

 

 

思路

  1. 内核层面:加大连接数,加快tcp回收
  2. mysql层面:增大连接数, 关闭磁盘noatime, 使用SSD硬盘
  3. php层面:用长连接,节省连接数
  4. 用内存缓存(memcached/redis),减轻mysql压力

 

注意
内存缓存适用于缓存复杂的sql查询。因为php与memcached也要建立tcp连接,所以简单的sql查询不需要用缓存。

如您需要优化或服务器托管/代维服务, 可以尝试联系迷城网络帮你解决一站式服务。 https://www.dnsjia.com   QQ476429467

本文链接:https://www.8090st.com/lnmp-youhua.html 转载请注明出处.
如果喜欢:点此订阅本站
相关文章
为您推荐
各种观点
暂时还木有人评论,坐等沙发!
发表评论

快捷键:Ctrl+Enter