如何才能精确测量我的服务器上每个网站所消耗的资源?

如何才能精确测量我的服务器上每个网站所消耗的资源?

我们的服务器存在性能问题,这可能是也可能不是我们网站流量过大所导致的必然结果。我们希望优化每个网站的性能,以便在购买额外硬件之前确保获得最大的“性价比”。

我想知道是否有人知道一些创造性的方法来测量每个网站所消耗的资源(内存、带宽、CPU 时间等)。这可以让我们找出最大的“罪犯”并首先开始处理它们。

我们正在运行 Red Hat Enterprise Linux Server 版本 5.6 (Tikanga)

答案1

我会先mod_log_config。定义一个或多个LogFormat/CustomLog设置,httpd.conf仅包含您感兴趣的统计数据以及有关您要过滤的请求的任何元数据,然后您可以从这些日志文件中快速生成比较统计数据。例如:

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 请求的第一行。因此,您可以根据要查找的内容保留或删除任何其他信息,或者为每个统计数据创建一个日志,或者任何您想要的内容。(我喜欢使用 cronolog 每天轮换日志。-%H如果您希望每小时轮换一次,请添加。)

然后,您可以通过任何您想要的数字运算来运行相应的列,以获得总数、平均值,识别特别缓慢或滥用的页面,或其他内容。

此外,如果您有mod_logio启用后,你可以获得精确的%I分别使用和来计算字符串%O中每个请求的传入和传出带宽的字节数(加密/压缩/所有内容之后)LogFormat

答案2

运行 suexec 可以更容易地看到哪些用户正在使用更多的资源,因为他们的 php 进程似乎以他们的用户身份运行,而不是以运行 apache 的系统用户身份运行,例如 www-data 或 nobody。

根据我的经验,magento 占用大量资源,特别是当您刚开始使用时。我们过去可能将几个中等繁忙的网站放在一个盒子上。使用 magento 时,我们发现自己将一个网站放在多个盒子上。

您当然不想在不尝试对性能进行一些调整的情况下运行 magento。我强烈建议您将 memcached 设置为 magento 的缓存(说明这里)。并将您的会话存储在 memcache 中,然后打开块缓存。(这将获取由各个块生成的 html 并将其存储在 memcache 中,以便下次访问同一块时,无需再次运行 phtml 文件)。

您可能想要运行像 APC 这样的操作码加速器来缓存 PHP 操作码。

更新:

您肯定希望确保 mysql 已调优,尤其是 innodb 缓冲池中有足够的空间。(magento 的表都是 innodb)。我认为阅读有关 mysql 性能调优的好地方是mysql 性能调优博客.首先调整 innodb_buffer_pool_size。请注意,他们通常谈论的是在只运行 mysql 的服务器上运行 mysql,因此当他们说“在 16 GB 的盒子上将 12 GB 专用于 innodb_buffer_pool”时,您应该向下调整,因为您的盒子不仅仅在运行 mysql。

答案3

你从错误的角度开始。

传统上(也是理智的!),您首先要识别实际问题;然后逐步诊断其原因,然后才添加硬件或更改软件配置。

如果现在发生了实际的、可观察到的问题,那么就从这里开始:尝试准确确定它发生的情况,是否可以精确重现,并估计对业务的影响。

接下来,开始从您的应用程序堆栈收集性能数据;这可能涉及但可能不限于:操作系统资源利用率、Web 服务器指标、PHP 缓存、数据库、磁盘 I/O 和延迟。

如果答案看起来模糊或笼统,我很抱歉 - 问题也是如此。

答案4

我总是在所有服务器上运行 collectl。它每 10 秒采样大量指标,每分钟采样 slab/进程数据,并将其全部写入一个文件,您可以播放或使用 colplot(coltl-utils 的一部分)进行绘图。您还可以按照您选择的任何采样间隔实时运行它。

根据您在几个小时甚至几天内看到的情况,您可以开始采用 apaptr 明确提出的方法,首先确定是否存在问题,然后采取措施纠正。通过收集流程中每一步的数据,您可以很容易地判断情况是有所改善还是变得更糟。

-标记

相关内容