18.224.32.112--[美国-Amazon数据中心]-开启辅助访问 切换到窄版

萬法歸宗-郭岳璋的家

 找回密码
 立即註冊
查看: 8650|回复: 0

Discuz X2.5 終於變快

[复制链接]
admin 该用户已被删除
发表于 2012-6-13 15:17:26 | 显示全部楼层 |阅读模式
X1.5開始研究Discuz。覺得Discuz是很好用的CMS
始終把我的網站改成Discuz X2.0 進而升級到Discuz X2.5。是磨練的開始也是美夢的開始。
Discuz X2.5 為何慢! 開啟首頁要20 secs. 2 refresh 只要 0.023sec.
暈!開始思考為何X2.0不會如此慢。
一個網站若在5秒內沒開出來是沒法讓大眾接受的。
下定決心好好面對換回去X2.0 or 繼續努力?
網上搜出很多優化的帖子。
伺服器端的優化有:
1. Discuz方面優化:
memcache  eaccelerator  apc  靜態化都是在系統端優化。
將這4種建議方式安裝後。仍不見成效。
2.Mysql 的測試:
  更換了版本
  mysql-5.0.45 mysql-5.0.96
mysql-5.1.56  mysql-5.1.63
  mysql-5.5.25.tar.gz
  •   mysql-5.6.2-labs-innodb-memcached.tar.gz
   一樣慢的下場。
試著將my.cnf
  1. [mysqld]
  2. port           = 3306
  3. socket         = /tmp/mysql.sock
  4. skip-external-locking
  5. skip-name-resolve
  6. key_buffer_size = 128M
  7. max_allowed_packet = 4M
  8. table_open_cache = 256
  9. sort_buffer_size = 4M
  10. net_buffer_length = 64K
  11. read_buffer_size = 2M
  12. read_rnd_buffer_size = 1M
  13. myisam_sort_buffer_size = 16M
  14. log-error=/usr/local/mysql/log/error.log
  15. log=/usr/local/mysql/log/mysql.log
  16. long_query_time=2
  17. log-slow-queries=/usr/local/mysql/log/slowquery.log
复制代码
.....
  1. /usr/local/mysql/bin/mysqld, Version: 5.5.25-log (Source distribution). started with:
  2. Tcp port: 3306  Unix socket: /tmp/mysql.sock
  3. Time                 Id Command    Argument
  4. 120612 16:12:50     1 Connect   root@127.0.0.1 on
  5.                     1 Query     SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary,sql_mode=''
  6.                     1 Init DB   my20
  7.                     1 Query     SELECT * FROM pre_common_session WHERE `sid`='8s705S'
  8.                     1 Query     SELECT * FROM pre_common_cron   WHERE available>'0' AND nextrun<='1339488770' ORDER BY nextrun LIMIT 1
  9.                     1 Query     UPDATE  pre_common_cron SET `lastrun`='1339488770' , `nextrun`='1339491600' WHERE `cronid`='6'
  10.                     1 Query     SELECT * FROM pre_forum_threadmod WHERE expiration>0 AND expiration<1339488770 AND status=1
  11.                     1 Query     SELECT * FROM pre_common_cron   WHERE available>'0' ORDER BY nextrun LIMIT 1
  12.                     1 Query     REPLACE INTO pre_common_syscache SET `cname`='cronnextrun' , `ctype`='0' , `dateline`='1339488770' , `data`='1339488000'
  13.                     1 Query     SELECT * FROM pre_common_block_item WHERE `bid` IN('320','321','309','317','234','313','279','235','247','308','315','319','246','304','262','249','
  14.                     1 Query     SELECT * FROM pre_common_block WHERE `bid` IN('320','321','309','317','234','313','279','235','247','308','315','319','246','304','262','249','252',
  15.                     1 Query     SELECT * FROM pre_common_block_style WHERE `styleid` IN('134','116','128','113','120','135','119','140','124','125','123','115','141','122','143','1
  16.                     1 Query     UPDATE  pre_common_block_item SET `makethumb`='2' WHERE `itemid`='1'
  17. 120612 16:13:10     1 Query     UPDATE  pre_common_block_item SET `makethumb`='2' WHERE `itemid`='1'
  18.                     1 Query     DELETE FROM pre_common_session WHERE  sid='TZ67S8'  OR lastactivity<1339487890  OR (uid='0' AND ip1='180' AND ip2='168' AND ip3='163' AND ip4='250'
  19.                     1 Query     INSERT INTO pre_common_session SET `sid`='TZ67S8' , `ip1`='180' , `ip2`='168' , `ip3`='163' , `ip4`='250' , `uid`='0' , `username`='' , `groupid`='7
  20.                     1 Query     UPDATE  pre_common_block SET `dateline`='1339488770' WHERE `bid`='247'
  21.                     1 Query     SELECT * FROM pre_common_block_item_data WHERE `bid`='247' AND isverified=1 ORDER BY stickgrade DESC, verifiedtime DESC, dataid DESC  LIMIT 5
  22.                     1 Query     SELECT at.*, ac.viewnum, ac.commentnum FROM pre_portal_article_title at LEFT JOIN pre_portal_article_count ac ON at.aid=ac.aid WHERE at.status='0' O
  23.                     1 Query     SELECT * FROM pre_common_block_item WHERE `bid`='247' ORDER BY displayorder, itemtype DESC
  24.                     1 Quit
  25.                     2 Connect   root@127.0.0.1 on
  26.                     2 Query     SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary,sql_mode=''
  27.                     2 Init DB   my20
  28.                     2 Query     SELECT * FROM pre_common_session WHERE `sid`='TZ67S8'
  29.                     2 Query     SELECT * FROM pre_common_cron   WHERE available>'0' AND nextrun<='1339488790' ORDER BY nextrun LIMIT 1
  30.                     2 Query     UPDATE  pre_common_cron SET `lastrun`='1339488790' , `nextrun`='1339489800' WHERE `cronid`='15'
  31.                     2 Query     SELECT * FROM pre_common_cron   WHERE available>'0' ORDER BY nextrun LIMIT 1
  32.                     2 Query     REPLACE INTO pre_common_syscache SET `cname`='cronnextrun' , `ctype`='0' , `dateline`='1339488790' , `data`='1339489800'
  33.                     2 Query     SELECT * FROM pre_common_mailcron WHERE sendtime<=1339488790 ORDER BY sendtime  LIMIT 1
  34.                     2 Quit
  35. 120612 16:13:11     3 Connect   root@127.0.0.1 on
复制代码
3.最後想或許問題在IO
就將linux 伺服器劃出1G Ram來模擬 RamDisk 。將 mysqldata 網站所有程式移到RamdiskRamdisk速度約為Raid0 10倍速。所有最好環境都用上。仍不見起色。
莫非這是天意!本人研究八字八卦風水也20多年,linux 14年。我看需要起個卦來問八卦祖師與諸賢聖。
還是先靜靜思考問題。決定先用-奇門遁甲的招數。將慢的部分放在後面refresh 一次。
在網站前面放個靜態.html. 刷好在跳轉到discuz X2.5。一般User是看不出來。
所以會很快。這就是戲法人人會變巧妙各有不同。

---
4.還是從根本好好學習 DiscuzX2.5的程式.
安裝了 phpxref-0.7.1.tar.gz後就好好從基礎開始學。
  1. /source/class/db/db_driver_mysql.php
  2. ...
  3. function _dbconnect($dbhost, $dbuser, $dbpw, $dbcharset, $dbname, $pconnect, $halt = true) {
  4.          <span style="color: DarkOrchid;">echo 'Begin-'.date('Y-m-d H:i:s') .'
  5. ';</span>
  6. ...
  7.   $serverset && mysql_query("SET $serverset", $link);
  8.        $dbname && @mysql_select_db($dbname, $link);
  9.                   <span style="color: Purple;">echo '
  10. '. $dbname. '-'. date('Y-m-d H:i:s');   // exit;</span>
  11. ...

  12.   public function query($sql, $silent = false, $unbuffered = false) {
  13.                 if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG) {
  14.                         $starttime = microtime(true);
  15.                 }

  16.                 if('UNBUFFERED' === $silent) {
  17.                         $silent = false;
  18.                         $unbuffered = true;
  19.                 } elseif('SILENT' === $silent) {
  20.                         $silent = true;
  21.                         $unbuffered = false;
  22.                 }
  23. $func = $unbuffered ? 'mysql_unbuffered_query' : 'mysql_query';
  24. <span style="color: Purple;">echo '
  25. '.date('Y-m-d H:i:s') .' begin-('. $func. ')-'.$sql.'-' ;</span>
  26. if(!($query = $func($sql, $this->curlink))) {
  27. if(in_array($this->errno(), array(2006, 2013)) && substr($silent, 0, 5) != 'RETRY') {
  28. <span style="color: Purple;">echo '
  29. '.date('Y-m-d H:i:s') .' Retry-2006-2013-('. $func. ')-'.$sql.'-' ;</span>

  30.                                 $this->connect();
  31.                                 return $this->query($sql, 'RETRY'.$silent);
  32.                         }
  33.                         if(!$silent) {
  34.                                 $this->halt($this->error(), $this->errno(), $sql);
  35.                         }
  36.                 }
  37.                 if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG) {
  38.                     $this->sqldebug[] = array($sql, number_format((microtime(true) - $starttime), 6), debug_backtrace(), $this->curlink);
  39.                 }
  40.                 $this->querynum++;
  41.                 return $query;

复制代码
---
  1. Begin-2012-06-13 02:31:22
  2. ver=5.5.25-log2012-06-13 02:31:22
  3. my20-2012-06-13 02:31:22
  4. 2012-06-13 02:31:22 begin-(mysql_query)-SELECT * FROM pre_common_session WHERE `sid`='0yQa1z'-
  5. 2012-06-13 02:31:22 begin-(mysql_query)-SELECT * FROM pre_common_cron WHERE available>'0' AND nextrun<='1339554682' ORDER BY nextrun LIMIT 1-
  6. 2012-06-13 02:31:22 begin-(mysql_query)-UPDATE pre_common_cron SET `lastrun`='1339554682' , `nextrun`='1339611720' WHERE `cronid`='14'-
  7. 2012-06-13 02:31:22 begin-(mysql_query)-SELECT serial FROM pre_common_patch ORDER BY serial DESC LIMIT 1-
  8. 2012-06-13 02:31:22 begin-(mysql_query)-UPDATE pre_common_patch SET `status`='1' WHERE `serial`<='25000002'-
  9. 2012-06-13 02:31:22 begin-(mysql_query)-SELECT * FROM pre_common_cron WHERE available>'0' ORDER BY nextrun LIMIT 1-
  10. 2012-06-13 02:31:22 begin-(mysql_unbuffered_query)-REPLACE INTO pre_common_syscache SET `cname`='cronnextrun' , `ctype`='0' , `dateline`='1339554682' , `data`='1339527600'-
  11. 2012-06-13 10:31:22 begin-(mysql_query)-SELECT * FROM pre_common_block_style WHERE `styleid` IN('115')-
  12. 2012-06-13 10:31:22 begin-(mysql_query)-SELECT * FROM pre_common_block_item WHERE `bid` IN('246','268')-
  13. 2012-06-13 10:31:22 begin-(mysql_query)-SELECT * FROM pre_common_block WHERE `bid` IN('246','268')-
  14. 2012-06-13 10:31:22 begin-(mysql_query)-SELECT * FROM pre_common_block_style WHERE `styleid` IN('120')-

  15. 2012-06-13 10:31:42 begin-(mysql_query)-UPDATE pre_common_session SET `sid`='0yQa1z' , `ip1`='180' , `ip2`='168' , `ip3`='163' , `ip4`='250' , `uid`='0' , `username`='' , `groupid`='7' , `invisible`='0' , `action`='4' , `lastactivity`='1339554259' , `lastolupdate`='0' , `fid`='0' , `tid`='0' WHERE `sid`='0yQa1z'-
  16. 回頂部
  17. 2012-06-13 10:31:42 begin-(mysql_query)-UPDATE pre_common_block SET `dateline`='1339554682' WHERE `bid`='261'-
  18. 2012-06-13 10:31:42 begin-(mysql_query)-SELECT * FROM pre_common_block_item_data WHERE `bid`='261' AND isverified=1 ORDER BY stickgrade DESC, verifiedtime DESC, dataid DESC LIMIT 1-
  19. 2012-06-13 10:31:42 begin-(mysql_query)-SELECT typeid, name, special FROM pre_forum_threadtype WHERE special>'0'-
  20. 2012-06-13 10:31:42 begin-(mysql_query)-SELECT * FROM pre_forum_threadclass-
  21. 2012-06-13 10:31:42 begin-(mysql_query)-SELECT * FROM pre_forum_threadclass-
  22. 2012-06-13 10:31:42 begin-(mysql_query)-SELECT DISTINCT t.* FROM `pre_forum_thread` t WHERE t.readperm='0' AND t.special IN ('1') AND t.isgroup='0' AND t.displayorder>='0' ORDER BY t.lastpost DESC LIMIT 0,1;-

复制代码
---
終於發現1行時間就錯誤 相差8小時 是時區問題。
16行是慢20secs的關鍵。
初步判斷discuz X2.5 慢跟時區 $this->timezone_set();  有關。
所以就將所有discuzX2.5  
$this->timezone_set($timeoffset);
$this->timezone_set();
全改為
$this->timezone_set(8);
所以速度就全靠網速與品質了。
謝天謝地!走了一大圈學習了新技術。往往逆境是突破最好的時機!
感恩discuz X2.5 團隊的貢獻。

---
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即註冊

本版积分规则

小黑屋|手機版|Archiver|masterkuo.com

GMT+8, 2024-9-20 07:28 , Processed in 0.030871 second(s), 14 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表