如何监控服务器上 php 脚本的负载?

如何监控服务器上 php 脚本的负载?

我们的专用服务器上有一个网站,该网站似乎引起了问题。

最近它使我们的专用服务器崩溃了——这非常烦人。它会随机崩溃。托管公司的技术支持团队表示,这是因为内存不足。他们增加了apache的maxclients设置,但没有效果。

所以最后可能发生的事情(我们已经将 mysql 和图像从服务器上移走了)是某处有一个 php 脚本正在使用大量内存。这是一个相当受欢迎的网站,当然不是按照堆栈溢出标准,但它相对受欢迎。

可能在某处存在内存泄漏,或者在某处或某处创建了某种无限循环。

如何查明哪些脚本使用的内存最多?

答案1

那是因为缺乏记忆。他们增加了 apache 的 maxclients 设置

寻找其他服务提供商。

如果您没有足够的内存来服务当前数量的客户端,那么增加客户端数量将使问题变得更糟。

第一件事是检查它是否正确记录 PHP 错误(即将它们写入网络服务器 error_log)。您可以通过简单地访问(故意)写得不好的脚本来测试这一点,例如

<?php
 this_fn_does_not_exist();

内存不足错误将写入此错误日志 - 包括当时正在执行的脚本以及失败位置的详细信息。

您还可以添加代码来记录详细信息内存使用情况(例如使用自动前置脚本)而不是等待它失败。通过注册关闭函数来实现这一点是一个好主意。

这应该为您提供一些重构的优先级。

同时,作为一个单独的练习,您应该设置一个 cron 作业来开始记录 httpd 进程的数量和可用内存量,例如

#!/bin/bash

t=`date`
m=`free | grep '+'`
p=`ps aux | grep httpd | wc -l`

echo $t $m $p >> /var/log/webload

然后将结果绘制成图表,以了解在给定的内存量下可以服务多少个客户端(注意,良好的 I/O 性能取决于缓存,然后根据系统上发生的 I/O 情况,您可能想要目标是释放大约 50% 的内存)。

这也将提供一种衡量重构效果的机制。

增加每个 PHP 进程可用的最大内存只需更新 php.ini 文件即可。

请应用 PHP/网络服务器调整的常规流程 - 即检查缓存、压缩工作是否最佳、记录和分析数据库查询。

注意,有时您只需要更多硬件。

相关内容