我应该运行哪种测试来确定服务器上的瓶颈?我正在尝试进行优化,以便在出现高负载峰值时能够维持高负载峰值。我在 LAMP 环境中运行 Ubuntu。
答案1
我建议首先安装一个日志记录框架,例如 munin,这样你就可以在基本负载和服务器高峰期间获得一些数据。然后,我会监控 SQL 服务器上的查询(尤其是慢速查询)。
通过这些信息,您已经可以确定这些情况是否非常特殊,或者它们是否只是给高负载的机器增加了最后一颗钉子,以及会发生什么,例如您的 RAM 不足,某些进程有时会重击磁盘,或者您的 CPU 存在问题。
答案2
这是一个非常广泛的问题。要测量任何东西,首先你需要一个基准性能指标。安装munin
并munin-node
评估你的基准。collectd
和古老的 SNMP 也是选项,但不太方便用户使用。
考虑一下您的应用程序。它是否需要大量数据库?是否需要大量 IO?是否需要 CPU(视频编码)?首先,执行一些常规 Web 应用程序任务,看看您的瓶颈在哪里。使用其他工具(如siege
、ab
或 )JMeter
来自动执行这些任务。
在建立了一些基准指标和临界点之后,你可以看到需要改进的地方。如上所述,这是一个广泛的问题,因此答案也相当广泛:
I/O 受限:您是否不必要地访问数据库?您的查询缓存是什么样的?您是否需要针对写入或读取进行优化?您是否需要单独的数据库服务器?
内存限制:假设您不受数据库 I/O 限制,并且内存中已存储了尽可能多的数据,那么您的数据集是否对于可用内存来说太大了?缓存命中率是多少?您是否使用了单独的缓存框架
memcached
?CPU 限制:您的应用程序是否能够利用多个核心/工作器?您是否遇到线程锁定或争用问题?考虑使用轻量级 Web 服务器(例如
nginx
Apache)或反向代理设置。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/