【发布时间】:2018-03-07 18:36:58
【问题描述】:
我有一个 PHP 守护程序脚本下载远程图像并在上传到对象存储之前将它们临时存储在本地。
PHP 内部内存使用量保持稳定,但 Docker/Kubernetes 报告的内存使用量不断增加。
我不确定这是否与 PHP、Docker 或预期的 Linux 行为有关。
重现问题的示例:
Docker 镜像:php:7.2.2-apache
<?php
for ($i = 0; $i < 100000; $i++) {
$fp = fopen('/tmp/' . $i, 'w+');
fclose($fp);
unlink('/tmp/' . $i);
unset($fp);
}
在执行上述脚本之前在容器内调用free -m:
total used free shared buff/cache available
Mem: 3929 2276 139 38 1513 1311
Swap: 1023 167 856
执行脚本后:
total used free shared buff/cache available
Mem: 3929 2277 155 38 1496 1310
Swap: 1023 167 856
显然内存已释放,但从主机调用docker stats php-apache 表明其他情况:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
ccc19719078f php-apache 0.00% 222.1MiB / 3.837GiB 5.65% 1.21kB / 0B 1.02MB / 4.1kB 7
docker stats php-apache 报告的初始内存使用量为 16.04MiB。
解释是什么?如何释放内存?
让这个容器在资源受限的 Kubernetes 集群中运行会导致 pod 失败并反复重启。
【问题讨论】:
-
内存被进程和内核使用。如果不是 PHP,则使用所有内存查找进程。
标签: php docker memory debian kubernetes