有客户的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'");
运行良好,修改结束。
最新评论