PHP应用程序性能

时间:2012-01-11 08:35:01

标签: php performance debugging profiling benchmarking

首先我想说我正在使用Drupal作为CMS,我知道有单独的Drupal stackexchange站点。但我的问题不是Drupal特有的,它不是用户级别或高级用户级别。它与PHP和服务器有关。好了,现在问题。

我开发了尚未推出的网站。随机时间内出现内存错误。有时服务器崩溃了。有助于重启。没有其他人使用App,所以没有重负荷。特别是超过了私人限制。我尝试过一些常规的东西 - 增加/减少PHP内存限制,查看错误日志,记录缓慢的MySQL查询。没什么......相同。

我已经运行了'top'linux命令。根据浏览器请求,有4-5个apache进程。 MEM使用率(%)为10,5,4,3,0.5。两个进程正在运行> 10小时。 重新启动apache后,我获得了+ 40%的可用内存。

这里有一些问题和对我而言。

  1. 当浏览器没有活动请求时,为什么这两个进程运行的时间如此之长?我该如何预防呢?
  2. 为什么我在重启后获得+ 40%的可用内存,当时我使用了apache使用的10 + 5 + 4 + 3 + 0.5内存?这应该不相等?
  3. 这可能是内存泄漏吗?我怎样才能发现它们?
  4. 我应该使用什么技术从较高级别降级到较低级别?想象一下,我的一个功能是“内存泄漏”,我应该如何在整个应用程序中找到他?
  5. 如何针对内存和CPU使用情况对特定功能进行基准测试?
  6. 为什么服务器崩溃了?即使是基本的httpd重启也会返回“fork:无法分配内存”。这可能是内存泄漏的症状吗?
  7. 请逐点回答。

1 个答案:

答案 0 :(得分:1)

听起来你可能在某个地方有无限循环,或者在处理GD等事情时你没有释放资源。

当有免费RAM时,Linux将内容保存在RAM中,如果突然需要来自另一个进程的RAM,并且ram没有被使用,Linux将为需要的应用程序释放/交换它。检查“free”的输出,您会看到一个缓存的列,它指示缓存的数量,并且可以随时释放。