我的LAMP应用程序正常运行,但每天的用户数量都在增加。一天早上我不想惊讶地发现一切因为超载而破裂。有没有办法粗略估计LAMP的容量是多少?
我知道一份完整的详细报告是很多值得研究的书籍,但我可以通过一些快速的试金石来判断事情是否正常。
所以说对于mysql组件,我怎么知道它需要多少负载呢?是30%的容量,50%?等。
我的阿帕奇相同。虽然我有一种感觉,DB会在apache之前死掉。
也许我原来不太好,因为英语不是我的母语。我真正想要的是一种衡量当前负载的方法。然后有一种方法来估计基于该负载,在失败之前我还能走多远。 (这应该针对每个组件单独完成,mysqld,httpd)
答案 0 :(得分:5)
基本上,根据我修复几个爆炸性PHP网站的经验,它通常是这样的:
1)人们使用MySQL
你可以完全使用MySQL,facebook和flickr吗(mysql粉丝喜欢那些)如果你知道GOTCHAS是:
在我修复的一个网站上,这家伙租用了一个双四核服务器,因为“他的网站需要电源”。我看看他的网站,我用>看看我以前的网站100K成员和一个在Via C7微型半pizzabox服务器上运行的洪流跟踪器,我告诉他,你的网站在地下室的Celeron 300上运行正常,这甚至是矫枉过正,我可以把它租给你一半Xeon的价格,哈哈。
事实证明这个家伙是一个优秀的开发人员和一个真正的好人,但他吮吸MySQL,所以他的网站有典型的搜索查询从地狱可以杀死任何网站:
=>所有查询的总序列化(MyISAM写锁定)。 1核100%,7核闲置,loadavg> 1000(是的,他使用的是apache),页面时间> 30秒,作品。
修复很简单:从地狱优化搜索查询,修复下面的点2),切换到InnoDB,切换到lighttpd。 loadavg下降到0.02
2)更新
没有人对页面计数器感兴趣。 每个页面视图的问题1更新,你已经死了。 添加一些MyISAM以获得更多效果。也是InnoDB的杀手,不是关于锁定,而是关于同步磁盘IO等待。
3)FULLTEXT
==>如果您需要全文索引,性能和可靠性,请使用Sphinx或Xapian。
我没有尝试过Sphinx(人们对它说好话),但Xapian很乐意快速搜索4GB文本。
4)人们使用apache。
这很好地结合了以上几点。
与像lighttpd这样的CPU使用率不可检测的正常服务器不同(糟糕的Via C7服务100个HTTP点击/ s而lighttpd使用的CPU不到1%),apache会杀死你的盒子。
当MySQL开始死亡(它很容易死亡)时,客户端开始疯狂地攻击F5,很快就会有大约1000个apache进程,每个进程都有一个PHP解释器,每个PHP解释器都有一个空闲的MySQL连接,等待一个MyISAM锁定,除了一个,它正在对页面视图计数器进行一些简单的更新,但这需要一些时间,因为服务器已经进行午餐交换,因为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编译的代码缓存。
答案 1 :(得分: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/