wordpress内存占用大和负载堵塞的解决办法

经研究和测试表明,wordpress系统排除google字体等代码问题,后仍然出现负载堵塞达到100%,或者内存占用达到90%以上。

这时可以从以下五个方面解决:

一、 改善wordpress网站所在服务器的php-fpm性能调整。

安装好 WordPress后,在浏览器中操作一段时间后,便无法再使用 WordPress,并出现了错误提示信息。在服务器后台开启 WordPress 的调试模式后,刷新浏览器,得到了更详细的错误信息,分析后得知是无法连接数据库的问题。在服务器中一看,MYSQL 数据库不知什么时候挂掉了。查看系统内存使用情况,发现总共 2G 的内存,现在使用了1600M+。在一看系统并没有交换分区。原因一下就很清楚了,是系统内存不足导致 MYSQL 崩溃。为系统添加了 1G 的交换文件作为虚拟内存后,数据库是不崩溃了,但 WordPress 使用一段时间后反应就相当慢,并且服务器的 SSH 连接也几乎不能使用。综合前面的情况可知,现在的问题是 WordPress 使用过程中占满了系统内存,系统开始使用交换文件,而交换文件性能不足导致。

在控制台重启服务器后,继续在浏览器中使用 WordPress,并且在后台实时监控系统内存的使用情况。发现进行更换主题,安装插件等一些操作时,系统内存使用量会大量增长,并且很快会超出物理内存大小,造成访问缓慢的问题。多方查找资料后,发现是 php-fpm 的问题。

php-fpm 的 FastCGI 进程一旦加载就不会释放,当其工作完成后,并不会释放给系统内存,而是休眠于 FastCGI 系统池中,等待下一次被唤醒。就造成了内存不断上升的问题。我一直用的是 php-fpm 默认配置,这个配置对于我来说可能有点不合适,需要修改配置文件。

php-fpm 的相关参数
pm:表示使用那种方式,有两个值可以选择,就是static(静态)或者dynamic(动态),默认为dynamic。
pm.max_children:静态方式下开启的php-fpm进程数量。
pm.start_servers:动态方式下的起始php-fpm进程数量。
pm.min_spare_servers:动态方式下的最小php-fpm进程数量。
pm.max_spare_servers:动态方式下的最大php-fpm进程数量。
区别:

如果pm设置为 static,那么其实只有 pm.max_children 这个参数生效。系统会开启设置数量的 php-fpm 进程。

如果pm设置为 dynamic,那么 pm.max_children 参数失效,后面 3 个参数生效。系统会在 php-fpm 运行开始的时候启动 pm.start_servers 个 php-fpm 进程,然后根据系统的需求动态在 pm.min_spare_servers 和 pm.max_spare_servers 之间调整 php-fpm 进程数。

php-fpm 参数调整
对于内存大的服务器(8G)以上,指定静态的max_children实际上更为妥当,因为这样不需要进行额外的进程数目控制,会提高效率。对于小内存的服务器,动态方式会结束掉多余的进程,可以回收释放一些内存。

这时选择动态模式,调整后的配置如下:

运行模式:pm = dynamic
允许创建的最大子进程数:pm.max_children = 20
起始进程数(服务启动后初始进程数量):pm.start_servers = 5
最小空闲进程数(清理空闲进程后的保留数量):pm.min_spare_servers = 2
最大空闲进程数(当空闲进程达到此值时清理):pm.max_spare_servers = 10
每个子进程在处理了多少个请求数量后重启pm.max_requests = 300

比如宝塔服务器控制面板,有PHP性能调整界面,可以直接调整。

然后重启 php-fpm,系统内存使用在二百多兆。操作 WordPress 一段时间后,系统内存使用量不断增长,最终稳定在1100M+。负载堵塞没有出现,问题得以解决。

二、修改WP的内存配置大小。

如果你的空间支持.ini,可以通过修改php.ini实现,以下三种方法任选其一,把memory_limit修改为128M或更高。

1. 首先在public_html 目录创建文件 php.ini,添加以下代码:
memory_limit = 128M
然后在根目录下修改.htaccess文件,添加下面代码:
suPHP_ConfigPath /home/username/public_html/

2. 同样是修改php.ini先在网站根目录下,建立一个php.ini文件,写入下面这句:memory_limit = 128M
接着再到网站根目录下修改.htaccess这个文件,写入下面这句:
SetEnv PHPRC /home/host1/public_html/usr1/
(unix path to the directory where php.ini is)
(keep the slashes)
注:以上代码中的”128M”可根据需要适当调整。

3. 通过服务器后控制面板台直接修改

三、 WordPress中的插件和主题过多。

WordPress程序自身占用的内存,加上插件,主题会导致更多的内存占用。

1. 删除没有启用的插件,并减少不必要插件的使用。

2. 如果服务器内存本身就很小,就不要使用占用大量资源的插件,比如All in OneSEO,Broken Link Checker,Yet Another Related Posts Plugin,NextGen Gallery这些大容量插件。

3. 另外,没有使用的主题也应该删除。这样做不仅能够减少内存占用过高的问题,也是增加网站安全性的一种基本措施。

四、限制wordpress定时功能

wordpress的定时发布功能真的很好,但是也非常耗费资源的,如果不需要,建议还是限制一下,我们需要在wp-config.php文件中限制。

define(‘DISABLE_WP_CRON’, true);

五、限制自动保存和副本数据

wordpress的自动保存是一个很好的功能,但是也很占用资源,目前部分wordpress模板已经限制了自动保存的次数等等,默认时候的WP会自动给我们保存草稿以及副本添加入数据库中,不信的话你到POST数据表看看是不是有很多记录,而我们的文章并没有这么多。这就是自动添加的,我们需要限制自动版本和限制自动保存草稿。

define (‘WP_POST_REVISIONS’, 0); define(‘AUTOSAVE_INTERVAL’, 600);

这样可以限制一下自动保存的时间。

或者直接关闭自动保存:

remove_action(‘pre_post_update’, ‘wp_save_post_revision’);
add_action(‘wp_print_scripts’, ‘disable_autosave’);
function disable_autosave() {
wp_deregister_script(‘autosave’);
}

参考资料:
CSDN博主「Peigenzi」的原创文章:https://blog.csdn.net/Peigenzi/article/details/73506298


发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注

寻渠道

本站厦门seo测试使用。本站内容均来源于互联网,如有不便请谅解,如内容有误可联系站长删除修改,联系QQ:875588036,谢谢!
嘿,欢迎咨询