有客户的windows服务器mysql一直占用居高不下,找我给查找原因。
查看连接数:
netstat -aon > c:\netstat.txt
看到总连接数400多个,还得去掉100多mysql的。这么小的并发怎么可能会有这么高的占用。
上传minisniffer抓取数据包,看看是否正在被攻击.经查证至少少量的php请求,主要分布为ad_js.php和mood.php。
修改缓存结构,把ad_js.php的数据库请求部分去掉。强制缓存为24小时。
< ?php
/**
*
* 广告JS调用方式
*
* @version $Id: ad_js.php 1 20:30 2010年7月8日Z tianya $
* @package DedeCMS.Site
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
$osiris_myid=$_GET['aid'];
$cfg_puccache_time=86400;
$cacheFile=dirname(__FILE__).'/../data/cache/myad-'.$osiris_myid.'.htm';
if (!file_exists($cacheFile)|| time() - filemtime($cacheFile) > $cfg_puccache_time){
require_once(dirname(__FILE__)."/../include/common.inc.php");
if(isset($arcID)) $aid = $arcID;
$arcID = $aid = (isset($aid) && is_numeric($aid)) ? $aid : 0;
if($aid==0) die(' Request Error! ');
$cacheFile = DEDEDATA.'/cache/myad-'.$aid.'.htm';
if( isset($nocache) || !file_exists($cacheFile) || time() - filemtime($cacheFile) > $cfg_puccache_time )
{
$row = $dsql->GetOne("SELECT * FROM `#@__myad` WHERE aid='$aid' ");
$adbody = '';
if($row['timeset']==0)
{
$adbody = $row['normbody'];
}
else
{
$ntime = time();
if($ntime > $row['endtime'] || $ntime < $row['starttime']) {
$adbody = $row['expbody'];
} else {
$adbody = $row['normbody'];
}
}
$adbody = str_replace('"', '\"',$adbody);
$adbody = str_replace("\r", "\\r",$adbody);
$adbody = str_replace("\n", "\\n",$adbody);
$adbody = "\r\n";
$fp = fopen($cacheFile, 'w');
fwrite($fp, $adbody);
fclose($fp);
}
}
include $cacheFile;
使用mysql工具查看负载
mysql -u root -p mysql> show processlist;
发现一个奇异的查询语句
$dsql->GetOne("SELECT count( mood ) AS cc FROM `#@__mood_ranking` WHERE aid = '$aid' AND ip = '$uip' AND time > $time24 ");
更改为
$dsql->GetOne("SELECT id from `#@__mood_ranking` WHERE aid = '$aid' AND time > $time24 AND ip = '$uip'");
运行良好,修改结束。














最新评论