1. 事情经过

其实这个问题困扰了我很长时间。事情经过是这样的:我在写这篇文章前几天,对网站服务器进行了停机维护,其中包括更换操作系统、重新配置网站环境、更换博客程序、使用新模板等许多操作(包括误删数据库并没有)。然后问题就出现了!内存多次跑满(如图)!由于我在服务器商处设置了内存超量报警,导致收到了几十条报警信息。由于我这几天有些事情(因为懒并不是),没有认真打理网站,所以只是确定服务器未被入侵后就重启了之。这一拖就到了今天。但是问题早晚要解决!现在我们来解决这个问题吧。

2. 排查过程

实际上排查还是很简单的,直接使用 linux 自带的命令free -m 然后查看空闲内存确定是内存跑满,然后是使用top命令查看进程情况,并确定 cpu 状态正常。

(这里本应有一张我修复故障前的 top 命令结果图,但是我忘记截图了……)

查询结果可以看见我服务器中PHP-FPM进程占用了一半多的内存,找到原因,果断处理!

补充几条命令,会对你排错有帮助:

查看每个PHP-FPM进程的内存占用:ps -ylC php-fpm –sort:rss

查看消耗内存最多的前 40 个进程:ps auxw|head -1;ps auxw|sort -rn -k4|head -40

查看PHP-FPM的平均内存占用:ps –no-headers -o “rss,cmd” -C php-fpm | awk ‘{ sum+=$1 } END { printf (“%d%s\n”, sum/NR/1024,”M”) }’

3. 处理方法

我们可以通过修改 php 的配置文件来限制PHP-FPM的创建和销毁。

我们找到 /www/server/php/etc/php-fpm.conf (在我服务器中是这个路径) 文件,用 vi 打开,找到 pm.max_children 也就是控制 php-fpm 子进程数量的字段,我修改前这个字段是 50,我将其修改为 25。再找到pm.max_spare_servers 这个字段表示空闲进程数的最大值,这个数应为pm.max_children 的 60%~80%,所以我设置为 17。

注意:如果pm.max_children设置过小可能会导致 502 错误频发,应按照自己服务器业务要求和服务器能力自行设置!

这样我们就修改好了配置文件 :wq 退出 vi,并使用 systemctl restart php-fpm 重启PHP-FPM。

(我基本可以确定,90%用户的php-fpm.conf文件与上图不同,大家自己找对应字段就好

4. 处理结果

我们可以看到重启服务后内存瞬间降低至 26%然后稳定到 50%,所以这个问题算是解决了!

linux php 内存高 排查,解决Linux中PHP-FPM进程过量占用内存相关推荐

  1. linux crontab不运行,Linux运维知识之解决Linux中crontab不执行ntpdate问题

    本文主要向大家介绍了Linux运维知识之解决Linux中crontab不执行ntpdate问题,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 解决Linux中crontab尚未 ...

  2. java内存问题怎么排查,java占内存高排查 java应用占用内存过高排查的解决方案...

    想了解java应用占用内存过高排查的解决方案的相关内容吗,zhaixing_0307在本文为您仔细讲解java占内存高排查的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:java,占内存过 ...

  3. Win11的两个实用技巧系列之加载驱动失败怎么办、占用内存高的解决办法

    Win11加载驱动失败怎么办?Win11无法加载驱动程序的三种解决方法 win11用户在使用电脑的时候遇到了"无法在设备上加载驱动程序"的情况,导致有些软件无法正常使用,这种情况要 ...

  4. linux sudo 命令无法使用,Linux运维知识之解决Linux下无法使用sudo命令问题

    本文主要向大家介绍了Linux运维知识之解决Linux下无法使用sudo命令问题,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 问题描述 使用普通用户登录后在终端中执行sudo ...

  5. 解决Windows10 系统中桌面窗口管理器运行时占用内存过大的问题

    问题复现 问题原因 产生这个问题的原因是因为在某次更新中 引发了内存泄漏问题所以会导致桌面窗口管理器运行时占用内存过大. 解决办法 链接: inter显卡驱动 选择安装驱动就行.

  6. 查看java进程占用内存_如何查看java进程大批占用内存

    如何查看java进程大量占用内存 你好,方法如下: 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: ...

  7. 32位应用程序单个进程最大占用内存是4GB

    32位应用程序单个进程最大占用内存是4GB左右,这个问题是因为需要测试大数据里才能体现出来的问题,所以反反复复花了一周多的时间来搞定它,希望大家在对它有一个印象.64位的应用程序的时候就不会有这个限制 ...

  8. 获取指定进程所占用内存、指定GPU显存信息、所有GPU型号和驱动

    ######################################################### # 获取指定进程所占用内存 ############################ ...

  9. linux++php无法解析,怎么解决linux php无法解析的问题

    linux php无法解析的解决办法:首先找到apache配置文件:然后在根目录下执行"#find / -name "httpd.conf"":最后添加内容为& ...

最新文章

  1. c语言 lis的nlogn算法,ACM竞赛高级算法讲义.doc
  2. 计算机科学与应用论文的素材,计算机专业学位论文范文最新资料汇集
  3. 编译安装 PHP 扩展 - 含 swoole 扩展安装和升级
  4. MongoDB的默认用户名和密码是什么?
  5. python编程入门教学-史上最全Python编程基础入门教程
  6. hdu2147PN图的画法
  7. 【p2p】【EdgeVPNio (evio)】简介: IP-over-P2P (IPOP)
  8. Allegro给一个网络赋默认值,取消默认值
  9. 凯立德导航android历史版本,凯立德导航升级2020版
  10. raisecom msg融合网关成都电信实战分享
  11. 服务器系统修复工具,Windows Repair(系统修复工具) v4.9.0
  12. python爬虫进阶-每日一学(图片反爬-雪碧图)
  13. Win10修改登陆密码
  14. Python文件读取关闭和写入
  15. OSPF之LSA详解
  16. Oracle DBA技术培训
  17. ngixn负载+keepalived高可用shell脚本
  18. JAVA设计模式什么鬼(建造者)——作者:凸凹里歐
  19. jqweui引入的标签
  20. idea怎么进行c语言编程_编程入门-C语言开发IDE选择

热门文章

  1. python计算机程序设计基础篇答案_计算机程序设计(Python)-中国大学mooc-试题题目及答案...
  2. 自动驾驶(六十五)---------ROS学习笔记(1)
  3. VUE中computed 、created 、mounted 的先后顺序
  4. 科研 | 认知电子战简介
  5. JS排序:localeCompare() 方法实现中文排序、sort方法实现数字英文混合排序
  6. 安装360网管版本,网站80端口被360entpulish服务占用,如何修改80端口!
  7. 大学生的移动开发之惑
  8. List,Map的练习2
  9. VC操作word和excel文件,查询与读写[依赖office环境]
  10. 浅谈Nick的大学生活,专科生真的没有翻身余地了吗?