我通常不是一个系统pipe理员,但我已经有负载繁重的生产服务器(服务一些基本的PHP页面,和一些PHPredirect文件,有一些SQL查询,没有图像),不断崩溃。 具体来说,负载达到20左右,并请求超时。 在apache访问日志或错误日志中没有任何内容表示exception活动,但是磁盘IO图表显示了与我们的宕机时间相关的严重读/写尖峰。
我知道这是这些页面的一些组合,每小时几十万次点击,但我很难过,我不知道要使用哪些工具。 我需要看到A)这些网页每秒钟/分钟/小时的点击次数,以及B)服务每页的时间。 有什么可用来分析负载下的活动服务器? 什么是最好的?
服务器是apache2,php5,Ubuntu的耐寒。 任何build议都非常感谢。
编辑:
感谢您的想法。 我可以编辑PHP,但是这些页面是devise人员经常更改的页面,他们喜欢复制/粘贴/删除东西,我希望find比这更好的东西,因为这是我们很多服务器上反复出现的问题。
生产服务器上是否真的没有用于监视服务器负载每个文件的软件包? 我必须诉诸于debugging工具和每个代码段分析? 如果我的服务器已经窒息的命中,不会添加XDebug royally F *!# – 我的S @ ^&?
您可以尝试使用Apache模块modlogslow来获取当前进程处理每个请求的时间段。
要尝试的最简单的第一件事就是确定最受欢迎的PHP文件。
您可以实时检查Apache的access.log文件,或使用类似apachetop的东西(尽pipe它也依赖于日志文件)。
您可以使用mod_status来检查Apache服务器状态 – 它也会告诉您使用Apache的CPU周期究竟是什么。 有很多关于使用它来识别CPU密集型请求的信息。
当你有一个“优化候选人”的列表后,你确实可以在每一个单独使用XDebug。
作为一个更简单的选项,您可以安装xcache或APC或任何其他PHPcaching软件。 它显着加快了PHP脚本的执行速度。
你应该尝试Xdebug的分析function 。 您可以将其安装为模块,然后打开分析以创buildconfiguration文件。 收集数据后,您可以使用WinCacheGrind或其他Valgrind处理来查看您的时间花费在哪里。 还有其他用于PHP分析的选项。
关于“A)这些页面每秒/分钟/小时的点击次数” – 这些信息将会出现在日志中,任何日志parsing器和/或Web分析统计软件包都会为您查看。 常见的免费/ OSS的列表在这里列出。
对于“B)服务每页需要多长时间”。 – 如果您使用自定义日志格式,也可以将其包含在日志中,但您必须检查您select的日志分析工具的文档,以确定它是否支持这些额外的信息。 当使用这个数字来推断事物时,要小心,而没有其他事实支持推论,因为时间显然将受到系统上的其他负载以及自身施加的负载的影响。
在你描述的情况下,最可能的麻烦来源之一就是数据库。 你没有说明你正在使用的数据库服务器是什么,所以我们不能在这里更具体,但你会发现大多数数据库允许logging长时间运行的查询,你可以使用像Apache的“时间”日志字段来推断寻找优化机会的地方。 特别查找对大型数据集执行表扫描的查询。
另一个主要的可能性就是你的机器的规格不够充分,所以你应该看到这个,如果是使用Apache日志分析器的话。 如果您的stream量突然过剩,可能会导致额外的Apache进程启动以及许多额外的数据库查询。 在任何一种情况下,这可能会导致大量的I / O活动,或者是由于数据库访问或交换,如果额外的进程推动机器过去可以装入内存。 在其中一个繁忙的地点,记住使用和交换活动是值得的,如果在发生的时候你不能捕捉到一个logging,那么你可以回顾事后发生的事情。 我使用collectd进行这样的监视(如果collectd不符合你的口味,还有其他类似function的选项),以及监视系统参数,如CPU使用,I / O和内存+交换使用它也有模块logging特定Apache和mySQL / postgres的属性,你可能会发现有帮助。 你说你已经有一个I / O图表,这意味着这样的解决scheme已经安装 – 你可以检查看看有什么其他的属性日志logging选项,特别是如果它可以区分I / O到你的数据所在的分区交换活动导致的I / O。
如果活动有问题,那么你可能会发现你需要更多的RAM,更好的I / O子系统,或者两者兼有,以便为站点的高峰负载提供服务 – 尽pipe代码或数据库devise中可能存在一些地方优化也将有所帮助,尤其是如果在不应该需要的情况下执行全表扫描,则可以考虑改进数据库中数据的索引),并且可以考虑使用某些caching技术来减lessdynamic内容重build的次数刮。
有一个简单的方法来自动prepend和追加到所有的PHP文件脚本: http : //www.electrictoolbox.com/php-automatically-append-prepend/
只要在前置文件中启动一个定时器,停止它并在附加文件中logging运行时间。
通过使用这种技术,您不必担心其他开发人员/devise人员覆盖您的代码。