LNMP单机高并发的简单优化
作者: 郑晓 分类: nginx, PHP, 分享经验 发布于: 2020-12-04 19:00 浏览:4,032 没有评论
小项目使用单台机器,2核4G,使用CentOS+Nginx+MySQL+PHP环境搭建的抢购活动。前台Vue+Laravel框架提供API及后管,使用Redis防止超售问题。
优化前使用默认的lnmp配置,活动开始后基本卡死,php-fpm日志记录到线程数量不够、CPU占用90%以上。慢日志中发现laravel include过多文件导致磁盘IO过高,网站请求变慢,进而导致nginx日志中过多的499状态码(客户端主动关闭),用户体验效果很差。
我使用的几条优化方法:
- 首先尽量减少抢购过程中的mysql查询,转移到Redis储存,开启Redis持久化,防止宕机后的数据丢失。
- 优化PHP-FPM,启动多个php-fpm master进程来分担过多的php请求,比如我启动了四个php-fpm。Nginx中使用upstream进行负载均衡。
- 手动指定Nginx的worker_processes和worker_cpu_affinity,我设置为双倍,即worker_processes 4、worker_cpu_affinity 0001 0010 0100 1000。
- 启用opcache解决php磁盘占用过高的问题,opcache缓存php编译后的字节码,直接跳过前期的文件相互引用和编译解释过程,效果明显。
测试优化后,并发能稳定在140左右,基本无错误,响应很快,体验提高很多。
本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。
本文永久链接: https://www.zh30.com/lnmp-high-performance-optimalize.html