php - PHP脚本至少需要Kubernetes上ram数量的3倍

标签 php docker kubernetes

我正在使用PHP在Kubernetes上运行一些计划的命令。

在本地docker上运行命令时,PHP RAM的使用至少比Kubernetes少70%。

我在本地和Kubernetes上都使用了相同的Docker镜像。

一个示例脚本:

<?php

use Symfony\Component\Process\Process;

require __DIR__ . '/vendor/autoload.php';

$remotePath = 'https://server/file.csv'; // Around 150MB

function downloadViaCurl($remotePath)
{
    $commandline = sprintf(
        'curl -o %s %s',
        '/tmp/file.csv',
        $remotePath
    );

    $process = new Process($commandline);
    $process->disableOutput();
    $process->setTimeout(null);
    $process->run();
}

downloadViaCurl($remotePath);

$memory = memory_get_peak_usage(true) / 1000000;
echo sprintf("Used %.2fMB of RAM" . PHP_EOL, $memory);

本地Docker的输出:

Used 2.10MB of RAM



K8S上的输出:

Used 6.29Mb of RAM



可以在https://github.com/InFog/memory_issues上找到Dockerfile和job.yaml

最佳答案

我发现了问题。

1-K8S部署将应用程序设置为开发模式。这是一个使用Doctrine ORM的Symfony应用程序。 Doctrine ORM的分析处于 Activity 状态,这使其能够收集内存中的所有查询,从而大大增加了所需的内存量。对于运行多达一百万个查询的长时间运行的进程,它使用的内存约为500MB,将其更改为未配置文件后,其使用的内存少于30MB。

经验教训:始终检查生产参数。

2-第二个问题:cronjob每次运行K8S都会运行一个没有Symfony缓存的新容器。这也将影响内存使用。我通过在将镜像推送到注册表之前预热Symfony缓存来解决此问题。

关于php - PHP脚本至少需要Kubernetes上ram数量的3倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62191070/

相关文章:

jenkins - 使用 Jenkins Docker 容器在 Kubernetes 集群本身内处理 CI/CD 是一种不好的做法吗?

php - 如何在 CodeIgniter 中执行我的 SQL 查询

php 查找div的内容

php - Doctrine :正反面

node.js - Jenkins 内的 Docker 代理 - npm "cannot find module"

docker - 备份 Docker 容器卷时,我的数据位于哪里?

security - 撤销对谷歌容器引擎上的 kubernetes 集群的访问

php - 性能、mysql 查询与 php 数组

docker - 重新启动docker对k8s集群有什么影响

node.js - 在Rancher中部署Node应用程序时无法访问此网站