我想知道如何基准测试php/mysql网站.
我们有一个网络应用程序几乎已经完成并准备上线,我们知道有多少人将在几年内使用它,但绝对不知道普通用户需要多少带宽,他们燃烧了多少时间我们需要确定要购买的正确服务器.
是否有服务器端linux可以监控每个用户的这些统计信息?那么我们就可以获取这些数据并进行推断呢?
如果我对此完全出错,请告诉我,但我相信这是新网络应用的常见活动.
编辑:我可能要求提供不正确的信息.我们可以看到数据库查询需要多长时间以及加载页面所需的时间,但不知道服务器上放置了什么负载.我问的问题是,我们可以同时处理100个用户...... 1000?命中1M用户需要什么类型的服务器要求.等等.
谢谢你的帮助.
我认为非常有用的工具是jmeter,它允许(最基本的)你设置你的浏览器使用jmeter作为代理,然后你在你的网站四处游荡,它会记录你所做的一切.
一旦你很高兴它对你的大多数网站都是一个不错的测试,你就可以将测试保存在jmeter中并告诉它用一定数量的线程和每个线程的一些循环运行你的测试来模拟你网站上的负载.
例如,您可以运行50个客户端,每个客户端运行10次测试计划.
然后,您可以上下调整数字以查看它对网站的性能影响,它会为您显示响应时间.
这使您可以调整不同的参数,尝试不同的缓存策略并检查这些更改对现实世界的影响.
您可以使用ApacheBench工具(ab,通常是apache web-server软件包的一部分)进行压力测试(1个请求,包含10个客户端= ab -c 10 -n 1000 http:// url)的脚本,您怀疑可能是慢得多.它将显示响应时间的分布(在90%的情况下,请求处理的时间少于200毫秒).
您还可以获取由该特定脚本执行的SQL查询,并为它们执行"解释计划",以便大致了解当表中的记录数量增加10-100-10亿次时,它将如何降级.
关于它可以提供多少用户 - 您可以使用您喜欢的浏览器并模拟典型的用户访问,获取access_log文件并汇总发送的字节(日志行中的最后一个数字之一).例如,每用户访问量为5kb text/html + 50kb png/jpg/etc. = 55kb.加上标题/等让我们说每次访问60kb*1m =每天60gb流量.你的带宽是否足够好?(60GB/86.4ksec = 700KB /秒).
除非您使用重量级框架或类似的东西,否则数据库查询可能是您应用中最慢的部分.
我为监控做的是测量我的数据库抽象对象中每个查询的执行时间.然后,对于每个花费超过X毫秒的查询(填写您自己的X),我在查询日志文件中写一行,用于标识查询出现的PHP脚本文件和行号(用于debug_backtrace()
查找该信息)与其他相关的上下文数据(例如用户身份,日期时间等).
可以在以后对该日志文件进行统计分析以获取各种信息.
例如,您可以找到哪些查询占用的总时间最长(与服务器负载相关).或者哪个是最慢的(与用户体验相关).或者哪个用户最多加载系统(可能是滥用或机器人).
我还绘制了Pareto图表,以确定最适合我的查询优化工作的位置.