从哪儿开始…
我有一些网站。 我是一名开发人员。 我不是一个很好的服务器pipe理员,也不是“性能调整”的人。 我确信我已经写了一些好的代码,明智的PHP和MySql查询。
特别是一个网站在繁忙时间有时会出现一些高负荷的问题。 统计数据每月大约有300万次浏览量,还有一些页面是完全没有逻辑的,但是却有一些广泛的媒体可供下载。 它采用Virtuozzo技术上的VPS,具有1.5G的可用内存(但从未占用超过一半的峰值,峰值或无峰值)。
我的问题是,我真的不知道从哪里开始找出我能做些什么来“帮助”我的网站。 我不知道我应该看什么样的统计数字来确定导致负载的真正原因。 是开始使用太多的TMP磁盘的MySQL? 我不知道。 是我的一些PHP代码执行起来很昂贵吗? 我不知道。 是Apache产生了太多的线程? 不能告诉。
我完全是在黑暗中如何解决这个问题,需要一些指导。
我应该安装Munin吗? 那么当我得到统计数字的时候,我在穆宁看什么呢?
在繁忙时间查看TOP,我可以看到负载有时高达20,在非高峰时段它几乎不会超过1.我可以看到Apache的线程数在100左右,tcp连接在300左右,mysql线程只有2 mysld和mysqld-safe,无论如何)。
我已经安装了一个操作caching(eAccellerator),但我没有真正的统计数据给你,除了看起来好像工作正常,因为页面的加载速度非常快。
那么,从哪里开始,以及如何攻击这一切都将不胜感激。
编辑峰值统计:约250请求/分钟,我在一个ServInt VPS,他们说所有的机器有4个CPU,但我想这只是爆裂(如果甚至),所以我不能肯定地说我的CPU对不起,说。
我已经为我们的公司知识库编写了几个维基页面,可能有助于:
老实说,你真的不想自己处理这些东西 – 你是一个开发者,专注于你的优势。 服务器性能和调整是另一个发展的世界。 我build议find一个好的系统pipe理员(或其团队)来处理这些问题。 冒有点垃圾的风险…我工作的公司做了很多这样的工作…
我在一个ServInt VPS,他们说所有的机器有4个CPU
通常这意味着所有主机都有四元组。 他们不会告诉你有多less个VPS客户端在这些服务器上运行。 它可能只有4个,可能多达100个。(你可以通过查看你的每月账单来猜测你所在范围的哪一端)。 如果你与很多其他人共享服务器,我预计高峰时间会让你的速度下降得比你使用网站的人更多。 20的服务器负载确实表明可能是这种情况。
要检测性能问题,请从构成站点的某个系统中取出一些:可能是apachenetworking,例如太多的用户; 它可能是运行太多循环的高性能PHP代码; 它可能是糟糕的devise查询,不使用SQL索引或检索太多的数据。 select1件事物来查看该组件的性能日志logging。 例如。 对于SQL,打开慢查询日志,检查缓冲区大小参数,检查连接数。 然后转到下一个组件并检查。 重复,直到高兴。
Jeff,作为一名PHP开发人员,您可以明确地回答一个问题,那就是您的代码是否是瓶颈。 加载平均值是CPU,所以如果你在高峰时间点击20,你会受到抨击。 通常这不是apache的一个指标,它使用了太多的cpu, 通常是你的代码或者你的查询。
XHProf是我find的最好的工具,用于挖掘代码的function。 XHProf是由Facebook开发的PHP分析工具,可以让你看到你的代码到底发生了什么。 它显示你的CPU时间,墙上时间(通常等待分贝),函数调用,调用堆栈等。它可以使你的代码中的昂贵的循环相当明显。
你甚至可以多次对你的代码运行它,把所有的结果汇总在一起,让你更清楚地了解发生了什么。 也许95%的网站闪电般快速,但只有一些资源大量的url,当击中,陷入系统的其余部分。 下面是build立它的一个很好的链接: http : //techportal.ibuildings.com/2009/12/01/profiling-with-xhprof/
还有一点需要注意的是,如果您的服务器上安装了操作码caching – XCache,eAccelerator或APC。 当php解释器在每个请求中被激发时,它的CPU占用很大,每次都会把你的PHP代码转换为操作码。 一个操作码caching将解释你的代码一次,并重新使用,假设你的代码没有经常变化足以保证每次重新编译它。