昨天折腾了一天,自己的一个用wordpress搭的站点竟然提示内存不够用,不能正常访问了。
百度了一下,都说是wordpress太占内存,众说纷纭,有不少人说是要把分配内存的最大值改大。没办法,我照着改了一下,确实能打开了。
问题是,网站变得无比的卡,我观察了一下服务器的CPU和内存的占用,几乎每一次的访问都爆掉了,CPU100%,内存快占满了。显然,问题不在分配内存上。
重新看之前问题的截图,说是wp-db.php的问题,我去看了一下源代码,并没有什么稀奇。是这么一个函数
function _real_escape( $string ) { if ( $this->dbh ) { if ( $this->use_mysqli ) { return mysqli_real_escape_string( $this->dbh, $string ); } else { return mysql_real_escape_string( $string, $this->dbh ); } } $class = get_class( $this ); if ( function_exists( '__' ) ) { _doing_it_wrong( $class, sprintf( __( '%s must set a database connection for use with escaping.' ), $class ), E_USER_NOTICE ); } else { _doing_it_wrong( $class, sprintf( '%s must set a database connection for use with escaping.', $class ), E_USER_NOTICE ); } return addslashes( $string ); }
就是一个和数据库有关的函数,问题可能就出在数据库了。
再结合一下访问日志,我发现有很多本服务器ip访问自己的记录。而且访问的都是wp-cron.php,百度了一下,这个是wp的定时功能,用于定时发布文章,定时备份数据库等功能。可是之前用都基本没有问题的啊。
再用PHPmyadmin查看一下数据库表,问题出现在这里!原来,wp_options表的 cron写入大量无用的数据,果然是它。更深度的原因,竟然是百度sitemap插件!
相信很多站长都有用这款插件,自动生成网站地图,是国人柳城开发的,但这款插件许久没有更新了,而wordpress最近自动更新到最新版本,导致插件不兼容。这款插件用到了定时的功能,来更新站点地图,于是在不兼容的情况下,往数据库里面写入了大量无用的数据。
于是,出现了以上的所有情况。
真相大白,把数据库wp_options表清理了一下,停用了这款插件。网站终于正常。现在回头看,这款插件真的是新手才会用的,用代码完全可以直接实现,而且不用多余的写入数据库、定时更新。教程请移步–>wordpress代码实现网站地图sitemap的html和xml的方法。
总结一下,看了网上其它人的情况,还有自己的情况,基本上可以看出来,当你的wordpress内存不足,或者很占CPU的时候,要么是你网站的访问量突然很大,要么,就是插件的问题了。而现在的wordpress有自动更新机制,建议停掉,然后在手动更新之前,看看自己的插件能不能兼容新版本,插件的更新也要及时。
另外,网站访问日志、错误日志也要好好看!问题大多能在里面找到!