PHP脚本至少需要Kubernetes上3倍的ram

PHP脚本至少需要Kubernetes上3倍的ram,php,docker,kubernetes,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'; // Ar

我正在使用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);
我发现了问题

1-K8S部署正在将应用程序设置为开发模式。这是一个使用ORM的Symfony应用程序。ORM的评测是活动的,这使得它可以收集内存中的所有查询,从而大大增加了所需的内存量。对于高达一百万个查询的长时间运行的进程,它使用了大约500MB的RAM,在将其更改为不分析后,它使用的内存不足30MB

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


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

使用
内存\u获取\u峰值\u使用率(true)
脚本返回分配的内存。您能否设置
内存\u get\u peak\u usage(false)
以查看使用的内存是否返回类似的结果?使用的内存返回以下内容:
在Kubernetes上使用了4.55MB的RAM
在本地上使用了1.83MB的RAM
。从您的repo构建docker映像,运行并执行http请求会导致peerNo http在那里重置连接。您可以登录到容器并运行
php download.php
,如果问题是配置问题,请删除该问题,或自行回答问题,但不要编辑起始帖子