Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 脚本在docker容器内运行,报告内存明显高于外部_Php_Docker_Virtualbox - Fatal编程技术网

Php 脚本在docker容器内运行,报告内存明显高于外部

Php 脚本在docker容器内运行,报告内存明显高于外部,php,docker,virtualbox,Php,Docker,Virtualbox,我正在为数据导入运行一个PHP cli脚本。它会定期检查内存使用情况,如果接近极限,就会优雅地弹出 if ($percentage = (memory_get_usage() / ini_get('memory_limit')) > 0.95) { $message = sprintf("%s Memory used %d Mb of %d Mb", ImportException::MEMORY_LIMIT_REACHED, (memory_get_usage() / 102

我正在为数据导入运行一个PHP cli脚本。它会定期检查内存使用情况,如果接近极限,就会优雅地弹出

if ($percentage = (memory_get_usage() / ini_get('memory_limit')) > 0.95) {
      $message = sprintf("%s Memory used %d Mb of %d Mb", ImportException::MEMORY_LIMIT_REACHED, (memory_get_usage() / 1024/1024), (ini_get('memory_limit') / 1024/1024));
      $this->logger->emergency($message);
      throw new ImportException($message);
}
在OSX(El Capitan iMac 3.5Ghz i7)上通过自制PHP CLI(v5.6.18)运行时,脚本运行良好,内存使用量从未超过100MB左右

现在,我尝试在Docker容器中运行脚本,该容器是从同一iMac上的VirtualBox VM启动的。VirtualBox VM有2048MB的内存,运行脚本的Docker容器也有相同的内存

关键是,PHP脚本报告的内存使用量与Docker stats报告的内存使用量一样巨大,并导致脚本在消耗了近2GB内存后提前崩溃。docker容器中的PHP CLI版本相同

我确信这一定与docker翻译内存使用情况报告的方式有关,而php报告方法又会采用这种方式。Mac上的进程也没有显示高使用率

我只是不太了解虚拟化和Docker的复杂性。我是否可以使用可靠的系统调用(通过passthru())来获取“真实”内存使用情况

正如建议的那样,我将PHP安装在相同的(Ubuntu 14.04)virtualbox虚拟机中,该虚拟机上安装了docker和我的容器。再次运行脚本显示与OSX上相同的行为,即内存使用量永远不会超过100MB

上图显示了top正在运行,同时脚本正在docker容器(1.306g)中运行,脚本在VM上运行(~83Mb)。两个进程运行的脚本完全相同(VM通过NFS装载,容器在VM上有数据卷)

在启动容器时,我确实看到了以下消息(警告:您的内核不支持交换限制功能,没有交换的内存有限):