真正解决WordPress后台卡反应慢问题,Apache内存释放及优化mysql

2018-08-0909:28:20 发表评论 38
摘要

真正解决WordPress后台卡反应慢问题,通过Apache内存释放及优化mysql,网上搜索“解决WordPress后台卡”,普遍把原因归结为google在线字体之类的原因,这些问题早就已经被各种优化插件解决,根本不存在!

最近一直想解决WordPress后台卡反应慢问题,情况基本是这样,登陆管理员账号到后台各种点击操作都反应非常慢,而且在登陆状态下访问前端页面也非常卡,非登陆用户访问前端页面流畅不受影响。

服务器环境:windows2008S2,apache2.4+php7.0+mysql-5.7

其他问题:用一段时间后httpd进程会占用过多内存,不定期出现CPU使用率100%,此时网站前端访问出现卡顿图片和JS加载缓慢出错,有时web服务错误等。

网上搜索“解决WordPress后台卡”,普遍把原因归结为google在线字体之类的原因,这些问题早就已经被各种优化插件解决,根本不存在!所以还是决定要从服务器环境上来解决!

Apache内存释放

解决方法一、优化apache

1、http-mpm.conf设置

Apache的线程数控制文件为http-mpm.conf,在conf/exrtra目录下面,要使该配置文件起作用需要在httpd.conf中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。

在Windows系统中,起作用的是Winnt mpm段,

<IfModule mpm_winnt_module>
ThreadsPerChild      150
MaxConnectionsPerChild    0
</IfModule>

以上是默认的配置,一般情况下够用了,但负荷较大的网站就需要修改了,否则访问网站会变慢或没有响应。实际设置中可以根据apache-status查看apache实时连接状态,查看其中线程占用数目情况来进行相应的调整,我的服务器最后设置如下:

<IfModule mpm_winnt_module>
ThreadsPerChild 500
MaxRequestsPerChild  10000
</IfModule>

其中ThreadLimit是占用系统线程数限制,修改后会在apache-status中直接看到效果,就是对应的最大的可用线程数。

MaxRequestsPerChild 是进程的最大的请求数目,既指网站收到请求的缓存数。设置太小了会影响服务器性能,因为会占用较多cpu时间,太大了则会占用内存资源。一般大型的网站文件个数都是成千上万,所以管理员应该根据网站情况自己设定,只要不为0(无限制)就可以,以防止内存溢出。

ThreadsPerChlid是Apache进程的子线程数,意思是服务器开了这么多的线程数来等待响应客户端请求。该参数需要根据apache-status实时的监控情况来调节,太大会导致内存增长过快,直到服务器当机,太小会导致服务器连接队列在高峰期时占满,从而导致网站连接慢。同时我们应该修改另一个配置文件httpd-default.php中的超时设置来配合这个参数。

2、httpd-default.conf设置

在httpd.conf中去掉Include conf/extra/httpd-default.conf前的#以使httpd-default.php生效。我们需要调节以下参数:

Timeout 15

该参数为连接超时,默认的300秒显然太大,缩小该参数就会减少同时连接数,即用户实际占用的线程数,这样就可以起到配合上面ThreadsPerChlid参数的作用。

KeepAlive On

该参数为是否保持活连接,目前网站中一个页面一般会包含多个文件,所以相应用户访问时会有多个请求,因此开启可以提高服务器性能。(有人说keepalive在windows下开了没效果)

MaxKeepAliveRequests 50

该参数为最大的活连接请求数,可以根据网页实际包含的文件数目自行调节。

3、httpd.conf设置

#AcceptFilter http none
#AcceptFilter https none

3、修改为

AcceptFilter http none
AcceptFilter https none

httpd.conf中默认添加了这个配置只是注释掉了,我们去掉#号,开启配置。

此处可以解决某些浏览器导致apache慢或者假死不响应的情况,提高兼容性。

这样设置后,Apache在响应请求和防止恶意攻击方面就取得较为平衡的效果,当然由于内存回收机制和进程管理不同,Windows下长期运行Apache还是不如Unix稳定,因此我们可以让Apache在每天凌晨访问人数少时自动重启一次,以回收资源。

mysql优化

解决方法二、优化mysql

修改mysql文件夹下面的my.ini文件再重启服务,发现排除故障时还是查看一些案例解决的最有参考价值,以下都是修改my.ini,如果你的my.ini中查询没有的话可以直接添加进去

#取消文件系统的外部锁

skip-locking

#不进行域名反解析,注意由此带来的权限/授权问题

skip-name-resolve

#索引缓存,根据内存大小而定,如果是独立的db服务器,可以设置高达80%的内存总量

key_buffer = 512M

#连接排队列表总数

back_log = 200

max_allowed_packet = 2M

#打开表缓存总数,可以避免频繁的打开数据表产生的开销

table_cache = 512

#每个线程排序所需的缓冲

sort_buffer_size = 4M

#每个线程读取索引所需的缓冲

read_buffer_size = 4M

#MyISAM表发生变化时重新排序所需的缓冲

myisam_sort_buffer_size = 64M

#缓存可重用的线程数

thread_cache = 128

 #查询结果缓存

 query_cache_size = 128M

#设置超时时间,能避免长连接

set-variable = wait_timeout=60

重点在哪里很容易看到吧,红色的红色的!!!!!

WordPress

重启刷新了几次,终于快了起来,还是缓存管用啊! WordPress后台也不在卡了,瞬间流畅起来。前所未有的舒畅~~~~

最后,有条件和能力的最好还是在linux下使用apache,windows还是IIS好一些,不过很有趣啊~~

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: