LNMP下大量请求下报502错误的解决方法
最近正在着手于PHP网页的编写,由于服务器的配置较低,在平常的测压中,mysql服务总是因为内存不够而挂掉,本着学习的态度,使用了阿里的RDS mysql 第一次将网站服务器 与数据库分开,关键是,服务器在腾讯云,好家伙,直接公网连接数据库,本来wordpress 就优化不好,现在的TTFB(首字节时间直接干到500ms),再使用了静态缓存+MemCached,降到了200左右,有一说一,追求快速轻巧的话,还是建议使用其他博客系统吧。 言归正传,我用PHP写了一个API 接口,随机从数据库中取出一条句子,写好后,使用 Apache 的 JMeter 进行压力测试,开始先设置了200个线程。 再服务器查看 访问的日志 200 还行,基本上没有错误。 紧接着,将线程设置为300,心里觉得也没问题,结果一看日志;好家伙,502错误占据了我的屏幕。 排查一下系统的资源占用情况,内存占用 15 % ,cpu 15 % 负载 0.2 …… 见鬼了。。。 是不是 服务器带宽 达到了瓶颈了呢? 接着我又在压力,查了一下 502 错误一般都是由于 PHP FPM导致的 ,简而言之,就是后端挂了, top 命令 一看; 一切正常,测压关闭后,网站又可以正常访问,这说明PHP访问并没有关闭。其他版本PHP下的网站都可以打开,这又排除了服务器带宽的原因。 接着看FPM 的配置文件,各种 buffer ,加大buffer size ,无果。 查阅相关资料后得知 pm.max_children 这一项是最大的进程数,宝塔提示,每个fpm进程,要占用20m的内存,原本是80 ,我将他修改成200,测试 ,500个进程,没有发现502,只是测压时,网站的访问速度确实慢了一点 最长 TTFB 1s,不过这次确实 没有出现502错误了。