线上环境内存持续升高

线上部署的API项目,最近发现内存会出现持续升高的现象。

环境说明:

  • 阿里服务器一台4核8G,一台2核4G,均为centos7.4 + nginx1.12+php7.2
  • php-fpm配置
    pm=dynamic
    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35
  • 已开启opcache

现象描述:
重启php-fpm内存占用率就会降到5%,但是基本过个一两天内存占用就会上升到50%,如果不重启php-fpm它就会一直上升。
目前自己写了个shell脚本,定时检查服务器内存占用,超过一定额度就去重启php-fpm。但还是想要知道到底是什么原因导致的这种问题。

因为接口内容比较多,不知道该如何定位到问题;加上自己才接触服务器运维没多久,没什么分析的思路。
希望大家能提供给我一个定位问题或者排查问题的思路。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

可以看下 fpm 的配置文件,重点关注下 pm、pm.max_requests、pm.max_children 这几个参数的配置

3年前 评论

1.php-fpm相关配置:运行模式、max_children、start_servers、min_spare_servers、max_spare_servers 2.是否有装opcache? opcache怎么配置的? 稳定占用50% 其实也还好,具体看你环境是如何配置的

3年前 评论

我之前也碰到过这种问题,我那时候是在爬数据,可能是运行久,有些数据没有释放一直累积。

3年前 评论
  • 机器配置内存大小
  • 业务的QPS,查看是否由于业务压力导致的
  • 平均一个PFM进程大概在20M~100M之间,如果超过了这个范围可以把这个进程找出来,使用strace 分析进程调用,如果存在(IO)阻塞,通常会导致php-fpm进程占用很多的内存
  • 如果使用了CLI模式(队列),这个通常会占用更多的内存(常驻)
3年前 评论
playmaker

df -h top 看下 ,看看有没有缓存 、日志、矿机等情况

3年前 评论

看一下mysql和php慢日志,应该是某个操作时间过长了。

3年前 评论

phpfpm不是有一个运行多少次就会重启的配置吗?pm.max_requests = 200 这样子试试

3年前 评论
Hesunfly

一般在项目中,我们都会用到一些 PHP 的第三方库,这些第三方库经常存在内存泄漏问题,如果不定期重启 PHP-CGI 进程,势必造成内存使用量不断增长。因此 PHP-FPM 作为 PHP-CGI 的管理器,提供了这么一项监控功能,对请求达到指定次数的 PHP-CGI 进程进行重启,保证内存使用量不增长。合理的配置 pm.max_requests 的值即可

3年前 评论

php-fpm的work进程处理请求达到pm.max_requests数量时,这个子进程会重启,内存一般来说有有所降低,但是如果在重启期间,处理的请求都需要占用大量内存,php-fpm的内存占用确实会持续升高的,一个请求结束后,虽然内存会被释放掉,但是并不是释放给系统,而是释放给处理这个请求的php-fpm子进程。所以,你代码中很有可能存在部分接口,占用内存量特别大的。得好好检查下

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!