ero*_*ppa 6 php mysql linux performance lamp
我有一个运行正常的LAMP应用程序,但是每天用户数量都在增加.一天早上我不想惊讶地发现一切因为超载而破裂.有没有办法粗略估计LAMP的容量是多少?
我知道一份完整的详细报告是很多值得研究的书籍,但是我可以得到一些快速的试金石,看看情况是否正常.
那么对于mysql组件,我怎么知道它需要多少负载呢?是30%的容量,50%?等等
我的阿帕奇也一样.虽然我有一种感觉,DB会在apache之前死掉.
也许我原来不太好,因为英语不是我的母语.我真正想要的是一种衡量当前负荷的方法.然后有一种方法来估计基于该负载,在失败之前我还能走多远.(这应该针对每个组件单独完成,mysqld,httpd)
如果您的站点需要cookie等,ab有点烦人,ab太简单了。
基本上,从我修复多个爆破的PHP网站的经验来看,通常是这样的:
1)人们使用MySQL
如果您知道以下的GOTCHAS,则可以完全使用MySQL,facebook和flickr来做到这一点(mysql迷们很喜欢):
在我固定的一个站点上,那个人租用了一台双四核服务器,因为“他的站点需要电源”。我看了他的网站,看了我以前的站点,有超过10万名成员,并且在Via C7微型半披萨盒服务器上运行了一个洪流跟踪器,我告诉他,您的站点在我地下室的Celeron 300上运行良好,这甚至太过分了,我可以以至强至强价格的一半租给您。
原来,这个人是一个很好的开发人员,而且是一个真正的好人,但是他对MySQL十分满意,因此他的网站具有典型的“地狱搜索查询”,可以杀死任何网站:
=>所有查询的总序列化(MyISAM写锁)。1个核心100%,7个核心空闲,loadavg> 1000(是的,他使用的是Apache),页面时间> 30秒,可以正常工作。
修复很容易:从地狱优化搜索查询,修复下面的问题2),切换到InnoDB,切换到lighttpd。负载下降到0.02
2)更新
没有人对页面计数器感兴趣。每个页面视图的问题1更新,您已经死了。添加一些MyISAM以获得更多效果。这也是InnoDB上的杀手,,与锁定无关,而与同步磁盘IO等待有关。
3)全文
==>如果需要全文索引,性能和可靠性,请使用Sphinx或Xapian。
我没有尝试过狮身人面像(人们对此说得很好),但是Xapian很快就愉快地搜索了4GB的文本。
4)人们使用apache。
这很好地结合了以上几点。
与正常的服务器(如lighttpd)无法检测到CPU使用情况(笨拙的Via C7每秒提供100次HTTP命中,lighttpd使用的CPU少于1%)不同,apache会杀死您的机器。
当MySQL开始失效(很容易死亡)时,客户端开始遭受重创F5,很快您就会有大约1000个Apache进程,每个进程都拥有一个PHP解释器,并且每个PHP解释器都拥有一个空闲的MySQL连接,等待一个MyISAM锁,除了一个,它正在对页面视图计数器进行一些微不足道的更新,但这需要一些时间,因为服务器要进行午餐交换,这是因为有1000个apache,1000个php和1000个mysql进程。
Lighttpd不为静态页面使用cpu。lighttpd饱和CPU的唯一方法是,如果您用apachebench以20K请求/秒的速度对其进行重击。然后,Lighttpd与一些人进行对话,例如10个php-fcgi后端(每个内核2-4个是好的),它与一些MySQL连接进行对话。结果一切都快得多,并且在过载时,它会优雅地降级,而不是爆炸性的降级。
为了解决原始问题,您肯定要分析SQL查询。将查询日志添加到您的PHP应用程序中,该日志显示(仅向您显示),查询列表及其花费的时间,以及从PHP脚本开始到结束的时间(包括页眉/页脚是一个不错的选择)这个)。
对于复杂的页面(不包括搜索),您期望大约3毫秒的MySQL和3毫秒的PHP,这是一个不错的目标。当然,您需要一个PHP编译的代码缓存。
对于当前负载,您可以执行以下操作。最昂贵但最详细的答案将通过“Gomez”等企业应用程序提供。
但是,如果您想自己执行此操作,请参阅下面我之前的答案或使用 shell 实用程序,例如:htop、top、w,并利用 Apache server-status
问题修改前的先前答案:
您所要求的有时称为应用程序分析。
您需要创建一个粗略的记忆公式,例如:
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/