我继承了系统,我需要从硬件的角度尽可能地调整性能。首先,我是一个web开发人员,而不是一个SysAdmin,我不想做任何过早的性能调优,所以在过去的几天里,我做了一些研究,也建立了服务器和应用程序监控,并编写了一个小的计划,如何可以改进,但我需要有经验的人SysAdmin审查这一点。
我们之所以这么做,是因为网站接缝速度慢,流量也在稳步增长。主要的计划是重写系统,因为许多糟糕的体系结构决策,比如数据库本身,并没有正确地标准化。因此,当重写正在进行时,我们想做一些“愚蠢的”/simple扩展(如果可能的话),只是为了让客户满意。
我们运行的是单一服务器,它承载web应用程序和数据库。
我不关心MyISAM参数,因为我计划将所有表转换为InnoDB,这样对我来说就更容易调优了。
保持系统监视的弱点,这样我们可以有一个更好的情况以后,如果性能调优已经成功。
收集哪些页面加载时间最长的信息
据我所知,Varnish (粗略地说)缓存整个页面,并充当一个代理,它可以在不需要Apache参与的情况下为这些页面提供服务。在我们的例子中,我们有很多不经常更改的内容,尽管消耗了相当多的资源来生成。
进行基准测试
编写模仿用户行为的自定义脚本,并尝试使用“贪婪”特性。当站点未被访问时,同时运行这些脚本,并收集系统的性能信息。在站点优化之前和之后执行此操作。虽然,这一点对我来说很有意义,但我以前还没有真正听说过做类似的事情,只是在Rails基准测试中看到了类似的想法,我希望避免过早地进行基准测试,所以我很高兴听到一些关于这方面的意见。
这将使所有的调优过程变得更简单。
Qcache_hits / Qcache_inserts x 100 = Your Query Cache's effectiveness.query_cache_limit =256 KFLUSH QUERY CACHE;SQL_NO_CACHE,尽管query_cache_limit应该防止狮身人面像破坏缓存。这有点棘手,因为我们只有大约3GB的额外内存可以分配给MySQL。在我们的例子中,Innodb TableSpaces的总大小大约是3GB。以下文章:选择innodb_缓冲器_池子_大小建议将innodb_buffer_pool_size设置为比InnoDB TableSpaces的总大小多10%,在我们的例子中,这将是3.1GB,因此我们没有足够的内存。但是,向服务器添加更多的物理内存并不是一个问题。
除了innodb_buffer_pool_size调优之外,还应进行以下MySQL参数更改:
innodb_flush_method = O_DIRECT (避免双重缓冲)innodb_log_file_size = 256M我遇到的大多数博客都建议使用Nginx和APC (PHP缓存)。我已经看到了基准测试的结果,与启用mod_php的Apache相比,它们似乎都令人印象深刻。但是,在我们的例子中值得注意的是,我们在高峰时间提供3 3RPS服务。用Nginx改变Apache并不是一个容易的过程,坦率地说,如果需要的话,我更希望有一个经验丰富的SysAdmin来做这件事。如果在我们的情况下,迁移服务器是值得的,也许有人可以给出建议吗?
考虑到我的情况,有人能给我关于这个计划的任何反馈吗?
谢谢!
发布于 2012-02-29 17:57:49
你的总体计划是合理的。在接触任何东西之前,先进行系统监控和页面速度分析。只有知道问题在哪里,你才能解决问题。
一旦您知道瓶颈是什么(磁盘、CPU、RAM、数据库、WebApp),您就可以按照它们对用户的影响顺序开始针对它们。
在调优方面,您遗漏的一个特定项是数据库分析(EXPLAIN用于查询和创建/修改索引以提高性能)。这是一个有经验的DBA的工作--创建太多的索引会阻塞插入,而创建错误的索引无助于性能。
您还应该认真考虑将数据库服务器和web/应用程序服务器分开:两者都有相当困难的任务,将它们分开将避免重载一个主机。
如上文所述,如果我执行你的计划,我将按以下方式进行:
我不会使用自定义脚本进行基准测试,除非您在生产中有一个开发环境或维护窗口(您不想用测试负载来削弱您的生产环境)。
https://serverfault.com/questions/364966
复制相似问题