我有一个LAMP应用程序运行良好,但是用户数量每天都在增加。有一天早上,我不想被一个惊喜击中,发现所有的东西都因为过载而坏了。有没有办法粗略估计这盏灯的容量?
我知道,一个完整的详细报告是许多书值得研究,但我可以得到一些快速试金石测试,看看事情是否运行良好。
因此,对于mysql组件,我如何知道它还能承受多大的负载?它的容量是30%还是50%?等。
我的阿帕奇也一样。虽然我有预感DB会在apache之前就死掉。
也许我的原作不太好,因为英语不是我的母语。我真正想要的是一种测量当前负载的方法。然后有一种方法根据这个负载来估计,在它失效之前我还能走多远。(对每个组件、mysqld、httpd分别执行此操作)
发布于 2009-09-30 16:03:30
对于当前的负载,您可以做几件事。最昂贵、最详细的答案将通过企业应用程序(如"Gomez“)提供。
但是,如果您想自己动手,请参阅下面的答案,或者使用shell实用程序,如: htop、top、w和使用Apache服务器状态。
问题修改前的答案:
您所要求的有时被称为应用程序分析。
您需要创建一个粗略的内存公式,如:
httpd ram + php内存使用+ mysql进程使用=总请求内存占用量
您还需要一个CPU公式,但您也可以在负载测试期间的眼球顶部。
Apache有命令ab。
"ab是一个用于对(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策略是测试从网页请求到完成的应用程序上的每个进程(用户)负载。如果您可以确定每个请求使用多少ram Apache、PHP和MySQL,那么您可以快速确定系统容量。
您可能需要使用一些诊断工具,如vmstat或top,iostat或ps等,以便对系统中的许多请求进行快照。
最后,您需要安装Xdebug。此工具将帮助您分析应用程序的php端。http://xdebug.org/
下面是IBM关于安装Xdebug的教程:
http://www.ibm.com/developerworks/opensource/library/os-php-fastapps2/
发布于 2009-09-30 17:07:20
ab是有点烦人,如果你的网站需要饼干等,ab太简单了。
基本上,根据我修复几个PHP网站的经验,它通常是这样的:
1)人们使用MySQL
你完全可以使用MySQL、facebook和flickr来做(mysql的粉丝们喜欢这些),如果你知道以下这些问题:
。
在我修过的一个网站上,那家伙租了一台双核服务器,因为“他的网站需要电力”。我看了他的网站,我看了我以前的网站,有超过100名会员,还有一个运行在Via C7微型半比萨博服务器上的洪流追踪器,我告诉他,你的网站在我地下室的塞隆300上运行得很好,这甚至过火了,我可以用你的Xeon,lol一半的价格把它租给你。
事实证明,这个家伙是个优秀的开发人员,也是个很好的人,但他对MySQL很感兴趣,所以他的网站有一个典型的“地狱”搜索查询,可以杀死任何网站:
的趣味性。
所有查询的=>完全序列化(MyISAM写锁)。1内核100%,7内核空闲,loadavg > 1000 (是的,他在使用apache),页面时间>30秒,工作。
修复很简单:从地狱优化搜索查询,修正2)下面,切换到InnoDB,切换到lighttpd。装载量降至0.02
2)更新
没有人对页面计数器感兴趣。问题1对每个页面视图进行更新,您就死定了。添加一些MyISAM以获得更多的效果。也是InnoDB上的杀手,而不是锁定,而是同步磁盘IO等待。
3)全文
由于locking.
。
==>如果您需要全文索引、性能和可靠性,请使用Sphinx或Xapian。
我还没有试过狮身人面像(人们会说它很好),但是Xapian很高兴地快速搜索了4GB的文本。
4)人们使用apache。
这与上面的要点很好地结合在一起。
不像一个正确的服务器,比如lighttpd,它的CPU使用率是无法检测的(通过C7提供100个HTTP /s的低劣服务,而lighttpd使用的CPU不足1% ),apache会杀死您的机器。
当MySQL开始死亡(它很容易死)时,客户端开始严重打击F5,很快就有大约1000个F5进程,每个进程都持有一个PHP解释器,每个MySQL解释器都持有一个空闲的mysql连接,等待一个MyISAM锁,除了一个正在对页面视图计数器进行一些微不足道的更新,但这需要一些时间,因为服务器需要交换午餐,因为有1000个apache、1000php和1000个mysql进程。
Lighttpd不使用cpu处理静态页面。让你的CPU饱和的唯一方法是,如果你以20K请求/秒的速度与apachebench重击,那么lighttpd会和一些人交谈,比如10 php-fcgi后端(每个核心2-4是好的),后者可以与几个MySQL连接对话。因此,一切都要快得多,当超载时,它会优雅地降解,而不是爆炸。
为了了解最初的问题,您肯定希望分析一下SQL查询。将查询日志添加到PHP应用程序中,该应用程序显示(仅对您)、查询列表和查询所需时间,以及从PHP脚本开始到结束的时间(页眉/页脚包含是一个很好的位置)。
对于一个复杂的页面(不包括搜索),您会期望大约3毫秒的MySQL和3毫秒的PHP,这是一个很好的目标。当然,您需要一个PHP编译的代码缓存。
https://stackoverflow.com/questions/1499058
复制相似问题