|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 1900|回復: 0
打印 上一主題 下一主題

萬人在線MySQL及Discuz!論壇優化

[複製鏈接]

1萬

主題

3748

好友

7萬

積分

管理員

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    開心
    5 天前
  • 簽到天數: 3552 天

    [LV.Master]伴壇終老

    推廣值
    355
    貢獻值
    65154
    金錢
    11749
    威望
    72203
    主題
    11785

    文章勇士 回文勇士 文明人 附件高人 推廣 文章達人 中學生 高中生 大學生 教授 實習版主 簽到勳章 簽到達人 男生勳章 管理員 附件達人 伴壇終老

    樓主
    發表於 2011-1-19 20:26:00
    Discuz MYSQL 數據庫 性能:
    最近,幫一個朋友優化一個擁有20萬主題,100萬帖子,3萬多會員,平均在線人數2000人的Discuz!論壇,採用 Linux2.6+Apache2+mod_php5+MySQL5,服務器配置為雙至強+4G內存,優化前,系統平均負載(load average)基本維持在10以上,MySQL的CPU佔用率基本在90%以上,優化後,系統平均負載降到0.5以下,MySQL的CPU佔用率很少有超過10%的時候。優化前YSlow得分只有35分,優化後YSlow得分86分。現將優化的過程和經驗做一個記錄:

    首先,對 Apache進行優化,編輯httpd.conf,設置HostnameLookups、KeepAlive、MaxKeepAliveRequests 以及KeepAliveTimeout四個參數,調整MaxSpareServers、ServerLimit、MaxClients以及 MaxRequestsPerChild參數,還可以考慮棄用prefork而採用worker MPM。設置mod_deflate及mod_expires模塊,不過注意Discuz!不能對PHP文件開啟Expires,否則會出現問題。另外還可以考慮開啟mod_cache和mod_mem_cache模塊。另外利用cronolog按天對日誌進行輪循截斷,如果日誌特別大,也可以按小時截斷。另外再加上Awstats對日誌進行分析,並用gzip對日誌進行壓縮,自動刪除1個月前的日誌。

    其次,對PHP進行優化,編輯 php.ini,調整output_buffering、zlib.output_compression及max_execution_time、 max_input_time、memory_limit等參數,並安裝Xcache和Zend Optimizer。

    然後對MySQL 進行優化。首先重新靜態編譯MySQL,使其只支持MyISAM和Memory兩種引擎,並按Discuz!編碼選擇只支持UTF-8或者GBK字符集。編輯my.cnf,設置skip-locking、skip-external-locking、skip-networking和skip-name- resolve,根據內存和數據庫狀態具體調整key_buffer_size、query_cache_size、 query_cache_limit、max_allowed_packet、table_cache、thread_cache_size、 sort_buffer_size、read_buffer_size、read_rnd_buffer_size、join_buffer_size、 tmp_table_size、max_tmp_tables、back_log、max_connections、wait_timeout的參數。

    對數據庫進行優化,將threads和posts表中部分未索引的字段增加索引,並將supersite數據庫表從bbs數據庫獨立出去。修改discuz!配置文件,設置開啟pconnect。

    對 Discuz!設置進行優化。進入Discuz!系統設置,修改頁面緩存設置中的緩存有效期和緩存係數,修改服務器優化中的禁止瀏覽器緩衝和頁面Gzip 壓縮,修改防盜鏈設置中下載附件來路檢查,用JSMin自動對js文件進行縮減(Discuz! 6.1的common.js原文件29.3k,經JSMin縮減後為24.1k,再經deflate後為7.3k),修改attachments.php 文件,將:

    //dheader(』Cache-control: max-age=31536000′);
    //dheader(』Expires: 『.gmdate(』D, d M Y H:i:s', $timestamp + 31536000).』 GMT');

    前的註釋去掉。修改模板目錄下adv.htm,去掉與Insenz有關的代碼。

    通過查看MySQL的status,可以看出優化後,長時間運行的Key_read_ratio基本保持在0.05%以下,Threads_cache_hitrate保持在99.9%以上。個人感覺,Discuz!將Session保存在數據庫中,極大地降低了 Query Cache的命中率,如果需要進一步優化,可以考慮修改Discuz!源碼,將Session保存到Memcache中。

    優化之後用Siege做並發壓力測試,在200並發下,基本沒有任何錯誤。如果將來人數更多,可以考慮將平台遷移到Ngix+PHP FastCGI上。

    下面是用Siege在300並發下的測試結果:

    #siege -c 300 -b -r 35 -f bbs.url
    ** SIEGE 2.67
    ** Preparing 300 concurrent users for battle.
    The server is now under siege.. done.
    Transactions: 10500 hits
    Availability: 100.00 %
    Elapsed time: 52.68 secs
    Data transferred: 65.67 MB
    Response time: 1.27 secs
    Transaction rate: 199.32 trans/sec
    Throughput: 1.25 MB/sec
    Concurrency: 253.07
    Successful transactions: 10500
    Failed transactions: 0
    Longest transaction: 24.88
    Shortest transaction: 0.00

    500並發下的測試結果:

    #siege -c 500 -b -r 20 -f bbs.url
    ** SIEGE 2.67
    ** Preparing 300 concurrent users for battle.
    The server is now under siege.. done.
    Transactions: 9979 hits
    Availability: 99.79 %
    Elapsed time: 86.52 secs
    Data transferred: 82.66 MB
    Response time: 3.30 secs
    Transaction rate: 115.34 trans/sec
    Throughput: 0.96 MB/sec
    Concurrency: 381.07
    Successful transactions: 9979
    Failed transactions: 21
    Longest transaction: 34.80
    Shortest transaction: 0.00


    自我免責聲明:
    ※此貼僅供網路線路測試及學術交流 不得燒錄販售,請勿作商業上之用途!檔案下載測試完檔案,請立即刪除
    ※請勿公開販賣.以免以身觸法.如作為其它用途,皆與本論壇及作者無關!!
    ※若滿意者請購買正版並尊重智慧財產權
    ※如果此帖發表之內容涉及侵權,而損及您的利益,請立即通知版我刪除文章
    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-9-22 03:38 , Processed in 0.018960 second(s), 27 queries , Gzip On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部