如何找出分叉孩子的最佳数量

时间:2012-06-25 20:42:32

标签: php linux memory fork

我有一个全面的PHP脚本(在Linux上),偶尔需要进行大量的网络通话。为此,它分叉了许多孩子。问题是脚本如何识别它们的最佳数量?如果数量太大,服务器的物理内存耗尽,孩子们开始交换 - 性能损失。那么我怎样才能获得真正的可用物理内存量?由于显而易见的原因,“免费”命令并没有告诉我真实情况。

1 个答案:

答案 0 :(得分:2)

free会在第二行显示正确的图片(不包括带标题的行)。这是一个示例输出:

             total       used       free     shared    buffers     cached
Mem:       2060420    1754008     306412          0      97264    1013548
-/+ buffers/cache:     643196    1417224
Swap:      1951888          0    1951888

第一行中的空闲列非常无用,因为磁盘缓存也在那里。在第一行你根本不想要任何空闲内存。 另一方面,在第二行,减去磁盘高速缓存。这是机器当前的实际内存使用情况!

这是一个用于读取和解析GNU free的输出的PHP函数:

// Get system mem usage in kilobytes
// Returns: array($used, $free), or false on failure
function memory_usage() {
  exec('free -k', $lines, $error);
  if ($error) return false;
  $cols = preg_split('/\s+/', $lines[2]);
  return array((int) $cols[2], (int) $cols[3]);
}

// Usage:
list($used, $free) = memory_usage();
printf("used: %d\nfree: %d\n", $used, $free);