我们的服务器出现性能问题,这可能会或可能不会成为我们网站高stream量的必然结果。 我们希望对每个站点的性能进行优化,以便我们确信在购买额外的硬件之前,我们正在获得最大的回报。
我想知道是否有人知道一些创造性的方法来衡量每个网站消耗的资源(内存,带宽,CPU时间等)。 这可以让我们发现最大的“罪犯”,并开始从事这些工作。
我们正在运行红帽企业Linux服务器版本5.6(Tikanga)
我会从mod_log_config开始。 在httpd.conf定义一个或多个LogFormat / CustomLog设置,其中只包含您感兴趣的统计信息以及关于您要过滤的请求的任何元数据,然后可以从这些日志文件快速生成比较统计信息。 例如:
LogFormat "%t %v %B %D %h %r" statlog CustomLog "|/usr/bin/cronolog logs/stat.log.%Y-%m-%d" statlog
%t是时间戳, %v是虚拟服务器主机名, %B是发送的字节(不包括头文件), %D是经过了几微秒, %h是客户端IP地址, %r是实际发送的HTTP请求的第一行由客户。 因此,您可以根据您要查找的内容,或者为每个统计数据或任何您想要的数据logging任何其他信息。 (我喜欢使用cronolog来每日旋转日志,如果你想每小时轮换一次,就用-%H 。
然后,您可以通过任何数字运行适当的列 – 你想得到总计,平均值,确定特别慢或滥用的页面,或什么是你。
此外,如果启用了mod_logio ,则可以在LogFormatstring中分别使用%I和%O获取每个请求的传入和传出带宽的确切字节数(encryption/压缩/所有内容)。
运行suexec可以更容易地看到用户使用更多的资源,因为他们的php进程似乎是以用户身份运行,而不是像运行apache的系统用户那样运行,比如www-data或nobody。
根据我的经验,magento是一个巨大的资源猪,尤其是如果你只是运行它,因为它是出来的盒子。 我们以前也许把一个适度繁忙的地方放在一个盒子里。 随着magento,我们发现自己把一个网站放在多个盒子上。
你当然不想运行magento而不尝试对性能进行一些调整。 我强烈build议你设置memcached作为magento的caching( 这里的说明)。 并将您的会话存储在内存caching中,并打开块caching。 (这将采用由单个块生成的html并将其存储在memcache中,以便下次访问同一个块时,phtml文件不必再次运行)。
你可能想运行一个像APC这样的操作码加速器来cachingPHP操作码。
更新:
你一定要确保mysql被调优,尤其是你在innodb缓冲池中有足够的空间。 (magento的桌子都是innodb)。 我认为阅读mysql性能调优的好地方是mysql性能调优博客 。 我将开始调整innodb_buffer_pool_size 。 请注意,他们通常会谈论在运行mysql的服务器上运行mysql,所以当他们说“在16个gigbox上专门为innodb_buffer_pool提供12个演出”时,你应该调整方向,因为你的盒子不仅仅是MySQL的。
你从错误的结局开始
传统(也是理智的!),你开始识别一个实际的问题; 那么你就可以进一步诊断其原因,只有这样才能添加硬件或更改软件configuration。
如果现在出现一个实际的,可观察到的问题,那么这就是开始的地方:试着准确地确定它在哪种情况下发生,它是否是精确的可重复的,并且猜测对业务的影响是什么。
接下来,开始从您的应用程序堆栈收集性能数据; 这可能涉及但可能不限于:操作系统资源利用率,Web服务器指标,PHPcaching,数据库,磁盘I / O和延迟。
如果答案似乎是模糊的或通用的,那么我很抱歉 – 问题也是如此。
使用像仙人掌或穆宁公制收集系统。
我总是在所有服务器上运行collectl。 它每隔10秒对大量指标进行一次采样,并且每分钟处理一次数据,并将其全部写入一个文件,您可以用colplot(collectl-utils的一部分)进行回放或绘图。 您也可以按照您select的采样间隔实时运行它。
根据你在几个小时甚至几天看到的情况,你可以开始采取非常清楚的方法,首先确定是否有问题,然后采取措施纠正方法。 在stream程中的每个步骤都收集数据,可以很容易地判断事情是否已经改善或变得更糟。
-标记