如何粗略估算LAMP应用容量?

问题描述 投票:6回答:2

我有一个运行正常的LAMP应用程序,但是每天用户数量都在增加。一天早上我不想惊讶地发现一切因为超载而破裂。有没有办法粗略估计LAMP的容量是多少?

我知道一份完整详细的报告是很多值得研究的书籍,但是我可以得到一些快速的试金石,看看情况是否正常。

那么对于mysql组件,我怎么知道它需要多少负载呢?是30%的容量,50%?等等

我的阿帕奇也一样。虽然我有一种感觉,DB会在apache之前死掉。


也许我原来不太好,因为英语不是我的母语。我真正想要的是一种衡量当前负荷的方法。然后有一种方法来估计基于该负载,在失败之前我还能走多远。 (这应该针对每个组件单独完成,mysqld,httpd)

php mysql linux performance lamp
2个回答
4
投票

对于当前负载,您可以做几件事。最昂贵但最详细的答案将通过诸如“Gomez”之类的企业应用程序提供。

但是,如果您希望自己执行此操作,请参阅下面的我之前的答案或使用shell实用程序,例如:htop,top,w,并使用Apache服务器状态

问题修订之前的答案:

您要求的有时称为应用程序分析。

您需要创建一个粗略的内存公式,如:

httpd ram + php内存使用情况+ mysql进程使用情况=总请求内存占用量

您还需要一个CPU公式,但您也可以在负载测试期间观察顶部。

Apache有命令'ab'。

“ab是一个用于对Apache超文本传输​​协议(HTTP)服务器进行基准测试的工具。它旨在让您了解当前Apache安装的执行情况。这特别显示了您的Apache安装能够服务的每秒请求数。 “ http://httpd.apache.org/docs/2.0/programs/ab.html

这是一个通用的'ab'基准命令行:

ab -n 10 -c 1 http://www.yoursite.com/
# qty 10 total requests, 1 request at a time

策略是从网页请求到完成测试应用程序上的每个进程(用户)负载。如果您可以确定每个请求使用多少内存Apache,PHP和MySQL,那么您可以快速识别系统容量。

您可能必须使用混合的诊断工具(如vmstat或top或iostat或ps等)来快照系统要求的大量请求。

最后,您将要安装Xdebug。此工具将帮助您分析应用程序的php端。 http://xdebug.org/

这是IBM关于安装Xdebug的教程:

http://www.ibm.com/developerworks/opensource/library/os-php-fastapps2/


5
投票

如果你的网站需要cookie等,ab有点烦人,ab太简单了。

基本上,根据我修复几个爆炸性PHP网站的经验,它通常是这样的:

1)人们使用MySQL

你可以完全使用MySQL,Facebook和flickr做它(mysql粉丝喜欢那些)如果你知道GOTCHAS是:

  • 如果您有一个非只读的MyISAM表,并且任何查询超过100 us(甚至选择),那么您已经死了

在我修复的一个网站上,这家伙租用了一个双四核服务器,因为“他的网站需要电源”。我看看他的网站,我看看我以前的网站有超过100K的成员和一个在Via C7微型半pizzabox服务器上运行的洪流跟踪器,我告诉他,你的网站在我的地下室的Celeron 300上运行正常,这甚至是矫枉过正,我可以以你Xeon的一半价格租给你,哈哈。

事实证明,这个家伙是一个优秀的开发人员和一个真正的好人,但他吮吸MySQL,所以他的网站有典型的搜索查询从地狱可以杀死任何网站:

  • 来自地狱的每秒10个搜索查询(他在他的非法warez网站上有300K成员)
  • 来自地狱的搜索查询需要大约0.1 - 0.2秒
  • 对同一个MyISAM表进行一点并发更新以增加功能

=>所有查询的总序列化(MyISAM写锁定)。 1核心100%,7核心空闲,loadavg> 1000(是的,他使用的是apache),页面时间> 30秒,工程。

修复很简单:从地狱优化搜索查询,修复下面的点2),切换到InnoDB,切换到lighttpd。 loadavg下降到0.02

2)更新

没有人对页面计数器感兴趣。每个页面视图的问题1更新,你已经死了。添加一些MyISAM以获得更多效果。也是InnoDB的杀手,不是关于锁定,而是关于同步磁盘IO等待。

3)FULLTEXT

  • 由于锁定,MyISAM不能用于读写表。
  • MyISAM和ramdisk一样可靠(事实上,更少:你需要一个操作系统崩溃来破坏ramdisk,破坏MyISAM表只需要MySQL崩溃或只是同时击中它太多,你会得到“未知的表引擎错误”,我多次看到这个)
  • InnoDB上没有FULLTEXT
  • FULLTEXT索引中的任何插入都会触发几乎完整的索引重建(当我插入一个论坛帖子时,它正在重建400 MB的索引)

==>如果您需要全文索引,性能和可靠性,请使用Sphinx或Xapian。

我没有尝试过Sphinx(人们对它说好话),但是Xapian很乐意快速搜索4GB的文本。

4)人们使用apache。

这很好地结合了以上几点。

不像lighttpd这样的服务器,其CPU使用率是不可检测的(糟糕的Via C7服务100个HTTP点击/ s和lighttpd使用不到1%的CPU),apache会杀死你的盒子。

当MySQL开始死亡(它很容易死亡)时,客户端开始疯狂地攻击F5,很快就会有大约1000个apache进程,每个进程都有一个PHP解释器,每个PHP解释器都有一个空闲的MySQL连接,等待MyISAM锁,除了一个,它正在做你的页面查看计数器的一些简单的UPDATE,但这需要一些时间,因为服务器去了午餐交换,因为1000 apache和1000 php和1000 mysql进程。

Lighttpd对静态页面不使用cpu。 lighttpd使你的CPU饱和的唯一方法是使用apachebench以20K请求/ s的速度点击它。然后Lighttpd与一些人交谈,比如10个php-fcgi后端(每个核心2-4个好),它与一些MySQL连接进行通信。结果一切都快得多,当超载时,它会优雅地降级,而不是爆炸性地降级。

要获得原始问题,您肯定想要分析您的SQL查询。将查询日志添加到您的PHP应用程序中(仅显示给您),查询列表和时间,以及从PHP脚本开始到结束的时间(页眉/页脚包含是一个很好的地方)这个)。

对于一个复杂的页面(不包括搜索),你期望大约3毫秒的MySQL和3毫秒的PHP,这是一个很好的目标。当然,您需要一个PHP编译的代码缓存。

© www.soinside.com 2019 - 2024. All rights reserved.