如何确定 Ubuntu LAMP 环境的瓶颈

如何确定 Ubuntu LAMP 环境的瓶颈

我应该运行哪种测试来确定服务器上的瓶颈?我正在尝试进行优化,以便在出现高负载峰值时能够维持高负载峰值。我在 LAMP 环境中运行 Ubuntu。

答案1

我建议首先安装一个日志记录框架,例如 munin,这样你就可以在基本负载和服务器高峰期间获得一些数据。然后,我会监控 SQL 服务器上的查询(尤其是慢速查询)。

通过这些信息,您已经可以确定这些情况是否非常特殊,或者它们是否只是给高负载的机器增加了最后一颗钉子,以及会发生什么,例如您的 RAM 不足,某些进程有时会重击磁盘,或者您的 CPU 存在问题。

答案2

这是一个非常广泛的问题。要测量任何东西,首先你需要一个基准性能指标。安装muninmunin-node评估你的基准。collectd和古老的 SNMP 也是选项,但不太方便用户使用。

考虑一下您的应用程序。它是否需要大量数据库?是否需要大量 IO?是否需要 CPU(视频编码)?首先,执行一些常规 Web 应用程序任务,看看您的瓶颈在哪里。使用其他工具(如siegeab或 )JMeter来自动执行这些任务。

在建立了一些基准指标和临界点之后,你可以看到需要改进的地方。如上所述,这是一个广泛的问题,因此答案也相当广泛:

  • I/O 受限:您是否不必要地访问数据库?您的查询缓存是什么样的?您是否需要针对写入或读取进行优化?您是否需要单独的数据库服务器?

  • 内存限制:假设您不受数据库 I/O 限制,并且内存中已存储了尽可能多的数据,那么您的数据集是否对于可用内存来说太大了?缓存命中率是多少?您是否使用了单独的缓存框架memcached

  • CPU 限制:您的应用程序是否能够利用多个核心/工作器?您是否遇到线程锁定或争用问题?考虑使用轻量级 Web 服务器(例如nginxApache)或反向代理设置。sysctl.conf您可能还可以更改相关的(内核)参数。

  • 网络限制:在游戏的这个阶段不太可能出现。

其他要点和注意事项:

  • 可以使用以下方法对数据库进行一些快速优化mysqltuner.pl

  • 尝试尽可能地模拟真实流量(重放访问日志是一个好的开始)。

  • 如果您在生产数据库设置中触及磁盘上的交换区域,那么您将面临巨大的损失。

总结把您认为相关的所有内容都绘制成图表,大力打击您的服务器,进行调整,然后重复。

答案3

我发现最好的方法是在部署之前进行容量分析。不过,有一篇非常棒的文章可以准确说明您正在寻找的内容,希望对您有所帮助。

http://blog.inarow.net/post/227533559/four-steps-to-diagnose-your-lamp-application

1) 跟踪耗时超过一秒的 MySQL 查询 2) 监控 PHP 内存使用情况并记录 Apache 交付时间 3) 记录 PHP 错误 4) 在操作系统级别拍摄快照

我还想将 JMeter 添加到其中。http://jakarta.apache.org/jmeter/

相关内容