这是我在这里的第一个问题,这是关于一个特定的网站优化。2几个月前,我们推出了[网站]为我们的一个客户,这是某种社区网站。
一切都很好,但现在这个网站越来越大,它显示一些缓慢时,页面加载。
服务器规格:
- PHP 5.2.1(我认为我们需要在5.3上升级以使用新的垃圾收集器)
- Apache2.2
- 四核至强处理器@2.8 Ghz和4 GB DDR 3 RAM。
- XCACHE 1.3(我们在几个月前添加了此功能)
- Mysql 5.1(我们正在使用innodb作为引擎)
- Codeigniter框架
以下是我们迄今为止所做的工作以及我们打算进一步做的工作:
除了xcache之外,我们并没有真正使用缓存机制,因为大部分内容都是实时的。除此之外,我们不想过早地优化,因为我们不知道在流量方面会发生什么。另一方面,我们已经安装了memcached,我们希望实现一个基于memcached的缓存系统。
关于数据库结构,我们的大多数表都达到了3 NF,是的,我们有一些缓慢的查询(我们计划对此进行优化),但我认为这是因为产生缓慢查询的表是用于blog评论的表。(约44,408行)/用户日志跟踪(~ 725,837行)/用户评论(~ 698,964行)等,这些都是相当大的表。目前整个数据库的大小为697.4 MB。
此外,以下是2011年1月的一些统计数据:
每月唯一访问者:一百二十七点一二四
每月唯一视图:4.829.252
每月唯一访问:242.708
日平均值:
独特的新访客:7.533
独特的新视图:179.680
如果你需要更多细节就告诉我。
任何建议都是高度赞赏的。
- 谢谢-谢谢
6条答案
按热度按时间41ik7eoe1#
当谈到性能问题时,没有黄金法则或贴上标签便笺会首先告诉它与数据库有关。也许我可以建议做性能分析,在互联网上有很多免费和付费的工具可以让你这样做。
首先从Web服务器层开始,确保一切都做得正确,并尽可能优化。
然后进入下一层(我假设是您的数据库)。通常从外行的Angular 来看,每当有人提到InnoDB MySQL时,我们都会假设有索引被创建来优化和搜索操作。索引的使用也非常重要,因为您不希望索引出错而使事情变得更糟。我的建议是让DBA等效人员使用过渡环境进行故障排除。
另一个你可能会看到的技巧是内容,从网页内容到数据库数据,确保你只在需要的地方显示/保存数据,不要将不必要的信息存储到数据库中,并在网页上使用智能布局。在可用性和响应时间方面,减少一两秒可能会有很大的不同。
除非我们对您的应用程序、其体系结构和环境有深入的了解,否则很难在此解释详细信息,但以上是人们用来解决此类事件的一些常用方向。
祝你好运!
nnt7mjpx2#
这个网站有优秀的资源http://www.websiteoptimization.com/
提到的书都很好,只是有太多的技巧要在这里列出,我们不知道到目前为止你都尝试了什么。
icomxhvb3#
对不起,延迟的家伙,我一直很忙,以找到的问题,我做到了。
嗯,问题主要是因为apache,我有一个接近300 GB的访问日志,它在午夜被解析生成webalizer统计数据.大多数情况下,当这种情况发生时,网站是非常非常慢.我禁用了webalizer的域,清除日志,并看到什么,它是非常快的,无论你什么时候访问它.
我现在只有几个缓慢的查询,我倾向于修复今天。
我还按照建议更新到CI 2.0 Reactor,并开始使用memcached驱动程序。
谁会知道apache日志会有这么多问题...
xwbd5t1u4#
根据统计数据,我不认为您遇到了负载问题...凭直觉,我会先查看数据库。Database partitioning可能是一个很好的起点。
但是你应该首先对你的应用程序做一些分析。应用程序和数据库花费了多少时间?是否有应用程序方法使用了大量的时间,只是需要一些调整?数据库查询是否没有被有效地编写?你是否需要更多或更好的数据库索引?
a8jjtwal5#
一切看起来都很不错--如果升级codeigniter是一个选择,新的codeigniter 2.0(reactor)增加了对memcache的支持(新的缓存驱动程序,支持文件系统、APC和memcache)。
当缓存对象不足以满足我们的多域平台的巨大流量时,我们就开始投入更多的硬件--内存、服务器/数据库。然后我们转向数据库集群来处理单帐户预测的重负载。现在从apache转向nginx......这是一场永无止境的战斗。但对我们有效的方法是对缓存的内容进行智能化处理,增加服务器内存,然后在服务器之间分配此负载...
jk9hmnmh6#
1.缓存尽可能多的数据库调用。在我的CI应用程序中,我有一个很少更改的设置表,所以我缓存了对它的所有调用,因为我经常查询设置表。
1.缓存您的视图,甚至您的控制器以及。我倾向于缓存基本上尽可能多,我可以在我的CI应用程序,然后刷新该高速缓存时,一个文件的变化。
1.只自动加载重要的库、模型和助手。我见过有人自动加载多达10个库,最多几个助手,然后是一个模型。只有在使用数据库和会话库时,才需要自动加载它们。
关于第三点,您是否在config/autoload.php文件中自动加载了很多东西?这可能有助于加快速度,只在控制器中加载您需要的东西,当然会话和数据库库除外。