使用290Mb内存的简单PHP脚本 - 为什么?

时间:2012-04-05 11:34:46

标签: php

我有一个简单的PHP脚本作为cron作业运行,其目的是检查网页的标题并报告各种项目是否已更改。

我以前使用过这个脚本的各种版本并且它一直运行良好,但现在我在服务器上使用它,当脚本使用超过100Mb的内存时,通过电子邮件发出警告(除了列入白名单当然是脚本),令人惊讶的是我的标题检查脚本偶尔每天至少会报告大量的内存使用情况。

脚本每5分钟运行一次,内存问题每天发生5到6次 - 它似乎确实解决了,但我想阻止它偶尔使用这么大量的内存来实现这么简单工作

警告电子邮件报告此简单脚本的使用量约为290Mb:

<?php

  $message = "";

  function array_find ($needle, $haystack, $search_keys = false) { 
    if (!is_array($haystack)) return false;
    foreach ($haystack as $key => $value) {
      $what = ($search_keys) ? $key : $value;
      if (strpos($what, $needle) !== false) return $key;
    }
    return false;
  }

  $url = 'http://www.EXAMPLE.com/';

  $haystack = get_headers($url);
  $needle = "PHPSESSID";

  if (!((array_find($needle, $haystack)) != '')) {
    $message .= "No PHPSESSID in headers";
  }

  if (!(strpos($haystack[0], '200'))) {
    $message .= "No 200 OK";
  }

  if ($message != '') {
    mail("example@example.com", "Headers Changed", $message, "From: Example <example@example.com>");
  }

  exit;

?>

服务器是运行CENTOS 5.8,Apache 2.2.16,PHP 5.3.3的VPS

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

也许你每天只有5到6次大草垛?

PHP是一个渴望内存的野兽。这是事实。处理相对较大的数据阵列时,内存消耗可能会变得更加明显。

有一篇有趣的文章,名为"How big are PHP arrays (and values)? (Hint: BIG!)"强烈推荐阅读!

答案 1 :(得分:1)

也许在每个主要部分之后尝试执行memory_get_usage()。这应该可以帮助你缩小范围。

答案 2 :(得分:1)

尝试使用get_headers($ url)和memory_get_usage()创建一个文件并查看结果...

<?php 
$url = "http://www.example.com";
get_headers($url);
echo memory_get_usage();
?>

根据我的经验,PHP&gt; = 5的get_headers()会占用大量内存。您可以查看文章“get_headers() function results in memory leak

PS:您还可以使用xDebug跟踪脚本的内存使用情况

相关问题