首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php memory_limit与kubernetes资源内存限制

问php memory_limit与kubernetes资源内存限制
EN

Server Fault用户
提问于 2018-08-03 15:39:34
回答 1查看 4.5K关注 0票数 3

我是Kubernetes的新手,我正在努力弄清楚我应该为我的php webapp设置什么资源限制。

我的第一个猜测是,如果我已经将php fpm配置为最多使用256米内存,那么是否应该将kubernetes配置为限制为256 m。

设置如下:

  1. 在构建php容器的Dockerfile中,我将php memory_limit设置为256 m: sed -i '/^;php_admin_value[memory_limit]/cphp_value =256 m‘/usr/local/etc/php-fpm.d/www.conf
  2. 在我的Kubernetes Deployment中,我在fpm容器上设置了资源限制:资源:请求: cpu:“500 m”内存:“128 my”限制: cpu:"1“内存:”256 my“

让我问这个问题的是,PHP.net文档说:

memory_limit整数--它设置脚本允许分配的最大内存量(以字节为单位)。这有助于防止编写不当的脚本占用服务器上的所有可用内存。

php可以同时处理多个请求,我猜每个请求都运行一个完全独立于其他请求的脚本。它们不共享memory_limit设置。如果是这样的话,也许我的Kubernetes容器限制应该高于php memory_limit设置?

好吧,但是有多高!?如果我限制cpu: 1,我猜这意味着不可能有真正的并行处理,但是仍然有许多进程共享CPU,当被IO阻塞时,操作系统切换。我认为fpm pm.max_children设置会告诉我可以运行多少个脚本,因此可以最大限度地占用多少内存。但这会让人感到困惑,因为在我们的非Kubernetes设置中,我们根据实例有多少内存来选择max_children。我们使用的公式是:

代码语言:javascript
复制
max_children = (RAM - 2Gb) / 80Mb

# Where:
#  * We Reserve 2Gb for the system.
#  * We saw that each request needs on average 40Mb of memory, so we chose 80Mb to be safe.

由于RAM是在运行时指定的,因此这个等式在Kubernetes世界中是不存在的,您不需要为系统保留任何内存,因为容器只运行php。

我想用:

代码语言:javascript
复制
memory_limit = 256M
max_children = 10

resources:
  requests:
    cpu: "500m"
    memory: "512Mi"
  limits:
    cpu: "1"
    memory: "2Gi"
  • 正常病例: 10名儿童每人使用40M。内存使用量:400米
  • 高例: 10名儿童每次使用80M内存:800米
  • 最大案例: 10名儿童使用256米,每个内存使用量:2560米。不太可能发生,但如果真的发生了,库伯内特斯会将波德设置为OOMKilled,我认为这是因为它超过了极限。

这种想法看上去合理吗?我不认为它将允许良好的包装,因为10个孩子几乎不需要2Gi限制。如果资源紧张,我们将使用HPA添加更多的豆荚。

你在库伯内特斯的设计中做了什么?

EN

回答 1

Server Fault用户

发布于 2018-08-06 13:50:39

设置容器资源请求和限制是在Kubernetes集群中有效使用资源的第一步。设置这些值后,请确保已设置了监视和警报,以确定是否需要调整这些值或升级群集。如果您的容器遇到内存压力,内核将积极地丢弃页面缓存条目以满足需求,最终可能会被Linux (OOM)杀手杀死。由于K8s禁用交换(通过将内存-交换=0传递给Docker),因此对于错误配置而言,这是一个非常不可原谅的环境。

下面您可以找到适合阅读K8s限制并要求理解的文章:

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/924847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档