记一次帝国cms网站优化:服务器cpu负载100%怎么办?
经常有用帝国cms的站长在问网站cpu100%怎么办,网站速度慢怎么办,一直想写篇文章教大家,但不得空。这几天刚好有一位站长也为此困扰,我帮他优化了一下,效果良好,这里记录一下一下优化过程,给有需要的站长参考。
这位站长的网站基本情况是这样的:服务器上有2个网站,总IP3w,PV约30w,8核16G,带宽不详,宝塔面板,lamp。最近几天网站网站大部分时间处于负载100%情况。
接到任务后,就拿到了服务器的root账号密码,网站后台账号密码。登录网站后台,发现2个网站一个是帝国cms7.2,一个是帝国cms7.5.
一、用top命令查看网站负载情况
发现一个问题:每当cpu100%时,mysqld程序占cpu比较高,而且php-fpm进程数量大幅度增加。另外内存使用不多,有富余。
二、检查一下服务器环境配置
(1)还用的是PHP5.3
这个不能忍,都9012年了,升级到PHP7.1
PHP升级完后网站程序发生问题,ecms7.2的那个站不支持php7,于是给程序打补丁;有个插件在php7下也不能正常运行,出现乱码,修正。
(2)php-fpm的性能配置错误
原来用的是动态,50线程的设置,这个肯定不够。鉴于这台机器16G富余的大内存,调整为静态,500线程。
以上2个操作后,持续观察24小时,发现负载100%的情况相较之前有较大幅度减少,但还在难以接受的范围内,继续优化。
三、查看服务器日志
(1)php-fpm的慢日志
打开慢日志slow.log发现,网站使用的一款前台关键性插件,经常性超时。解决方法:使用东坡网的动态缓存插件
(2)mysql的慢日志
此服务器的mysql慢日志没有开启,只能手动开启,然后等待。打开日志后,发现问题
select searchid,keyboard from phome_enewssearch where iskey=0 and classid='7' order by onclick desc limit 4;
update phome_ecms_news set onclick=onclick+1 where id='5635' limit 1;
以上两种语句,经常执行时间超过5秒,再对照时间与面板的负载曲线时间,基本吻合,至此找到问题的关键症结。
分析第一个sql语句,发现这是网站使用了热门搜索词标签导致的,其实这个标签在前台根本没有效果,客户写标签就是错误的,果断在模板里删除这个热门搜索功能。
第二个语句,是动态页中的点击统计,这个语句每天执行约30w次,锁表并发不够导致问题,所以在动态页中屏蔽了这个统计,改用其它方法统计点击。
------------------------
至此,网站的负载100%问题解决。
插曲:在修改后观察网站负载过程中,有天凌晨负载突然升高,查看网站访问日志,发现有可疑IP段访问网站,防火墙禁用之。