type
status
date
slug
summary
tags
category
icon
标签
参考标签
在腾讯云轻量应用服务器上使用WordPress时,遇到了内存占用过高的问题,导致WordPress经常无响应。经过优化php-fpm进程、删除无用主题和优化MySQL等步骤后,内存占用有所下降,但仍不理想。最终发现将php-fpm进程管理方式改为ondemand模式可以最省内存。调整相关参数后,内存占用稳定在400MB左右。
本来只是买了个2GB内存的服务器,看着内存一直占用非常高,始终高于85%,偶尔高于90%。导致我WordPress经常没响应。
我心想,难道是我买的服务器内存太少了?一咬牙,升级到4GB内存。
结果牙白咬了,升级完成之后,问题照旧。内存占用还是非常高。
发现我的问题是大量php-fpm进程,占了太多内存。所以在网上找到两个帖子,分别是Linux的php-fpm优化教程/php-fpm进程占用内存大和不释放内存问题 和【服务器管理】Wordpress服务器内存占用太高(优化方案详解)。于是按照他们的方法进行优化。但是有几个地方跟他们的不一样,大概是因为服务器不同。我的服务器是腾讯云轻量应用服务器,CentOS 7, PHP 7.4
所以,第一种方法修改php-fpm文件,我的地址是
/www/server/php/74/etc/php-fpm.conf
直接参考第一个帖子输入下面的参数
第二个办法是删除无用主题,这个好办。
第三个办法,优化MySQL,我的文件在
/etc/my.cnf
在
[mysqld]
部分加入下面这一行然后重启MySQL
最后我重启了一下服务器,效果还不错,对比如下:
从原来的内存占用3.1GB,下降到了占用700MB。经过继续观察发现,内存占用还是会上升到2.4GB,比之前稍好一些,但仍然不理想。我规定了上限是20个fpm进程,后台就跑满了,每一个进程占3%的内存,正好是2.4GB。这东西真奇怪,跟寄生虫似的。
后续:
后面又去了解了一下这个问题。很明显是因为php-fpm进程的管理逻辑造成了它无故占用了很多物理内存。从《解决PHP-FPM进程导致的服务器内存占用》了解到:
该项共有三种设置方式 static、dynamic、ondemand
- —种是pm =static,始终保持一个固定数量的子进程,这个数由pm.max_children定义,这种方式很不灵活,也通常不是默认的。
- 另一种是pm = dynamic,他是这样的,启动时,会产生固定数量的子进程(由pm.start_servers控制)可以理解成最小子进程数,而最大子进程数则由pm.max_childr en去控制,这样的话,子进程数会在最大和最小数范围中变化,还没有完,闲置的子进程数还可以由另2个配置控制,分别是pm.min_spare_servers和pm.max_spare servers,也就是闲置的子进程也可以有最小和最大的数目,而如果闲置的子进程超出了pm.max_spare_servers,则会被杀掉。(注意,pm.max_spare_servers应小 Fpm.max_children)
- 第三种就是pm = ondemand模式,这种模式和pm = dynamic相反,把内存放在第一位,他的工作模式很简单,每个闲置进程,在持续闲置了pm.process_idle_timeo ut秒后就会被杀掉,有了这个模式,到了服务器低峰期内存自然会降下来,如果服务器长时间没有请求,就只会有一个php-fpm主进程,当然弊端是,遇到高峰期或者如果pm.process_idle_timeout的值太短的话,无法避免服务器频繁创建进程的问题,因此pm =dynamic和pm = ondemand谁更适合视实际情况而定。
那这么来看的话,把pm 参数改成ondemand就是最省内存的模式了。
参数改成
重启服务器。效果非常好,内存占用稳定在400MB左右。齐活儿了。
- 作者:TZ
- 链接:https://musingpages.com/technology/2024/02/25/tencent-light-house-memory-high-utility
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章