CentOS7 php-fpm内存占用问题排查
原文链接:lrach.com
原文:lrach.com
台部落无耻盗文!
致远网上的资料比较少。我接触这个系统也已经快两年多了。许多问题,特别是流程设置、表单设计、基础数据等问题,虽然致远给的官方手册上面有涉及,但是案例并不多。所以我决定把普遍公司流程设置上都会遇到的坑过一遍,作为二次开发之外的另一个专题共享出来,也算是总结一下自己的工作。
这次先说备份。备份这个坑我也是趟了不少。他们系统安装完毕之后,A8之后的版本均有一个“致远服务”的软件。这个软件可以实现备份,但是这个备份会自动重启系统。下面我分点具体来说。
复制拷贝安装目录
致远OA系统的备份分为两部分。附件+SQL备份。这两者如果都有备份存档,即可保证在系统需要重装的情况下,恢复到备份前的状态。
但是我强烈建议,如果你是新装或者是刚刚接手系统。马上把OA系统的文件夹复制拷一份出来另行存储。
这个的用处主要用在,有时候你会发现这个OA系统的文件夹内,会莫名其妙多出一些文件。而这些文件很可能是因为OA系统的漏洞,黑客上传的木马文件。包括但不限于致远本身的越权访问BUG、apache的一些漏洞等。虽然官方对此有提供补丁包。但是如果你是新装或者接手运维,你是不知道你目前已经打了哪些补丁了。你能做的,就是先备份一次,并定期看一下OA安装文件夹的文件最新日期。如果有发现有异样,先看是否是与拷贝出来的一致,不一致并且这个文件夹并非是日志内的话基本就能确认有漏洞。需要联系官方了。
SQL备份
此前说过,官方的备份功能会导致系统重启。重启就有很多运维上的未知,比如重启是否正常启动、重启的时候是否会导致用户正在填写的表单丢失等等问题。所以官方的备份功能我并不是很推荐频繁使用。我这边主要是采用SQL备份的功能。我这边主要是用Navicat等数据库工具,或者使用命令行也可以。直接把整个数据库的结构与数据均备份下来。
SQL备份除了表单中的附件之外,所有的设置、表单、数据均能覆盖到。我一般用来需要进行重大改动或日常备份。
官方致远服务备份
不知道是我用的有问题还是官方的旧版本有问题。这个致远服务每备份一次之后就会新打开一个,后续就会变得非常多
打开致远服务-数据库服务,即可看到官方的备份工具。请注意,这个备份功能会导致系统重启。生产环境使用该功能需要谨慎使用。
我一般是用做休息日进行备份。一周一次左右(请注意备份完成之后重启不起来的问题,特别是有较多二开功能的系统)
其中数据库安装目录为你数据库的目录,有部分情况下,这个功能会不认目录。比如简易安装的MySQL。均会提示未找到数据库目录。所以新安装的时候最好先看一下认不认目录。其余的按需求设置即可。
这个功能比较好的地方是它会同时备份SQL文件与附件文件。等于是一个OA系统的完整备份了。
如果需要恢复的时候,安装完OA之后,可以直接使用这里面的SQL覆盖恢复数据库,并把附件文件拷到对应的目录,即可完成整个OA系统的恢复。
至此,备份及恢复结束。后续会更新关于日常运维的其他内容。
1.问题排查
前些日子阿里云服务器一直报内存占用过高的问题,后来就没了声息。我近期工作也比较忙,随便看了看业务还在正常运行,就没深入了解。后来服务器也不报警,就没管了。
后来续费上去看了看了,好家伙怪不得没报警了。原来云监控插件都挂掉了。估计是因为内存占用过高,系统自动kill掉了云监控。在主机里面重新启动了云监控,内存直接就100%。
开始排除问题。
SSH登陆服务器,用free -m 再确认一下主机内存。
1核2G内存的机子,内存直接就满了。这台机器上面部署着Nginx+PHP+Mysql服务,外加一个Dokcer,但是Docker并没有运行。正常来说内存是绰绰有余的。只能使用top而后Shift+M按内存使用进行排序,再进一步排查。
发现是php-fpm开了太多线程了,直接挤爆了内存所致。
2.着手解决
找到 /etc/php-fpm.d/www.conf
,pm.max_children
默认是50,每一个进程占用1%-2.5%的内存,加起来就耗费大半内存了。所以我们根据需要修改为30。
pm.max_spare_servers
: 该值表示保证空闲进程数最大值,如果空闲进程大于此值,此进行清理 pm.min_spare_servers
: 保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程;
这两个值均不能不能大于 pm.max_children
值,通常设置 pm.max_spare_servers
值为 pm.max_children
值的60%-80%。
最后,重启php-fpm
systemctl restart php-fpm
问题解决。