百万记录级MySQL数据库及Discuz!论坛优化

最近,帮一个朋友优化一个拥有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

=======

转载于:https://www.cnblogs.com/yongzhi/articles/1233480.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

固件工程师到底是干什么?

大家好,我是写代码的篮球球痴可能大家还不知道,我是一个写固件的工程师,今天和一个微信朋友聊天,他问我工作几年了,我说我工作10年了,而且这10年我都一直在从事嵌入式固件相关的工作。他猛的觉得很不可思议…

c++ STL 工程实践的15条建议

STL是c非常重要的一部分,它是很多大神的杰作,高效,稳定,可扩展性好,虽然STL确实存在难以调试,内存碎片的问题(现在机器的内存越来越大,内存碎片的问题基本不太可能成为系统瓶颈&…

JS中关于构造函数、原型链、prototype、constructor、instanceof、__proto__属性

在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的。但是在ES6中引入了Class(类&#xff0…

asp 下载函数

N久没搞ASP啦,今天一个网友问到这个问题.就在网上找了下. 也不知道这个有没有错误. 下载的基本思路是这个样子的. 代码如下: <%Const USE_STREAM 0 0.不用流(Adodb.Stream)下载 1.用流下载Const ALLOW_FILE_EXT "rar,zip,chm,doc,xls,swf,mp3,gif,jpg,jpeg,png,bmp&q…

如何实现按键的短按、长按检测?

在电子产品中经常用到按键&#xff0c;尤其是经常需要MCU判断短按和长按这两种动作&#xff0c;本篇我们来专门聊下这个话题。只谈理论太无聊&#xff0c;我们还是结合着实际应用来说明。之前写过一篇关于《CH573第一篇&#xff1a;实现自拍杆蓝牙遥控器1》的文章&#xff0c;例…

ECC内存简介

ECC内存&#xff0c;即应用了能够实现错误检查和纠正技术&#xff08;ECC&#xff09;的内存条。一般多应用在服务器及图形工作站上&#xff0c;这将使整个电脑系统在工作时更趋于安全稳定。ECC是“Error Checking and Correcting”的简写&#xff0c;中文名称是“错误检查和纠…

HTTP与HTTPS的安全性讨论

转载文章&#xff1a;http://blog.csdn.net/xifeijian/article/details/54667989 1、http为什么不安全&#xff1f; http协议属于明文传输协议&#xff0c;交互过程以及数据传输都没有进行加密&#xff0c;通信双方也没有进行任何认证&#xff0c;通信过程非常容易遭遇劫持、…

使用NVM管理Node - Windows

安装 NVM NVM 下载&#xff1a;https://github.com/coreybutler/nvm-windows 安装 Node 注意&#xff1a;如果没有FQ默认源可能安装npm失败&#xff0c;请参考下一节“安装 NPM”修改镜像源地址。 查看可用版本&#xff1a; nvm ls available 安装Node&#xff1a; nvm install…

博士也会毕业吗?

怪我读书少&#xff0c;一直以来我都认为博士是一种很神奇的物种&#xff0c;他们能学会很多我们学不会的东西&#xff0c;那些奇奇怪怪的数学题&#xff0c;还有那种要背上几天的思想政治课文&#xff0c;以及要听懂那种像鸟儿一样呼唤的讲课&#xff0c;所以&#xff0c;我一…

3C趋势价值对云计算发展的驱动作用

日前&#xff0c;AMD总裁邓元鋆在参加云博会时&#xff0c;向来访的媒体透露了AMD在云计算方面的相关策略及计划&#xff1b;邓元鋆表示&#xff0c;未来AMD将以用户最为关心的Consumerization&#xff08;消费导向&#xff09;、Cloud&#xff08;云计算&#xff09;、Converg…

工作笔记

数据类型向下转换&#xff0c;精度丢失&#xff0c;可能会出现错误结果&#xff1a; public class SimpleFormat {public static void main(String[] args) {int a1111111;short b(short)a;System.out.println(b);//输出&#xff1a;-3001 } } 工具类DateFormatUitls转载于:htt…

国外出差见闻之印度

前段时间到印度的马德拉斯市出差了3个月(4月到6月)&#xff0c;今天终于有时间将自己的出差心得和见闻记录下来&#xff0c;可能以后就会忘记。下午16:00时在深圳坐车到香港机场&#xff0c;上车没多久会让填一个入境香港的单子&#xff0c;然后是过海关&#xff0c;过海关时会…

雷军的演讲以及产品发布

8月11号是小米的发布会&#xff0c;还有雷军的年度演讲。因为工作冲突我没看直播&#xff0c;晚上回来看了公众号文章和知乎上的内容讨论&#xff0c;也看了发布的新产品。雷军那个年代能够做上程序员一定是非常牛逼的人&#xff0c;而雷军是这些牛逼人的公司总经理&#xff0c…

候,一片天空

考完试了,也放假了.想知道自己能做什么更想知道自己要做什么曾经多么想好好努力好好看书现在才发现是该好好努力好好看书时间过得太快了,快得让人害怕只是睡觉,只是跑来跑去只是不明白什么时候才能真正自己靠自己只是不知道怎么样才能过得充实而有意义只是不晓得如何才能守住现…

轻松理解UML用例图时序图类图的教程

摘自https://zhuanlan.zhihu.com/p/29874146 写在前面 当你老大扔给你这样的图&#xff0c;或者你需要完成某些功能而去看文档的时候发现以下类似这样的图会不会不&#xff08;一&#xff09;知&#xff08;脸&#xff09;所&#xff08;懵&#xff09;措&#xff08;逼&#x…

[Winodows Phone 7控件详解]控件拾遗

1.Panorama控件和Pivot控件前面讲过&#xff0c;没有必要再重复一遍了。参见我的博文&#xff1a;http://www.cnblogs.com/DebugLZQ/archive/2012/03/19/2406284.html 2.DeepZoom DeepZoom 是silverlight的特色功能之一&#xff0c;也同样被加到了windows phone 7中来。这个功能…

这个工具替代Notepad++,我很满意

用过notepad的人并且还一直坚持使用它的人一定觉得它是一个非常优秀的软件&#xff0c;这个软件用来看日志&#xff0c;看代码和文档非常方便&#xff0c;而且里面还集成了一个HEX分析的工具&#xff0c;当然还有列模式等等。不吹牛啊&#xff0c;很多软件只做到了功能&#xf…

c#实现Stack

1 publicclassNodes //结点类2 {3 publicNodes Next;4 publicobjectValue;5 publicNodes(objectvalue) : this(value, null) { }6 publicNodes(objectvalue, Nodes next)7 {8 Next next;9 Value value;10 }11 }1 publicclassStack2 {3 privateintcount 0;4 privateNodes first …

Kubectl 部署有状态应用(下)

接上文 《Kubectl 部署有状态应用&#xff08;上&#xff09;》创建完StatefulSet后&#xff0c;本文继续介绍StatefulSet 扩展、更新、删除等内容。 StatefulSet 中的 Pod 验证序数索引和稳定的网络身份 StatefulSet 中的 Pod 具有唯一的序数索引和稳定的网络身份。 查看 …