官方论坛产品帮助刷图视频问题反馈

dede的mood插件做成这样也是一个水平

发表于 秦海传媒

    有客户的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'");
    

    运行良好,修改结束。

  • 此条目发表在 秦海传媒私有技术文章, 闲言碎语 分类目录。将固定链接加入收藏夹。

Google ADs

除非另有声明,本站文章遵循知识共享署名-非商业性使用 2.5 中国大陆许可协议。 Copyright © 2008-2012 99288.NET.CN.