首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >容器达到其内存限制时的高系统负载

容器达到其内存限制时的高系统负载
EN

Unix & Linux用户
提问于 2021-12-01 12:41:32
回答 1查看 464关注 0票数 1

我的服务器最近崩溃了,因为GitLab停靠/游牧民容器达到了其定义的内存限制(10G)。当达到极限时,容器将其cpu时间的100%用于内核空间。(容器仅限于4个cpu核心。)最终,主机被锁定,对ssh连接没有响应:

内核日志没有指示任何OOM杀死。我还注意到磁盘io中有一个尖峰,我无法解释。

我尝试创建一个更小的示例,没有任何现有的GitLab数据,也没有Nomad:

代码语言:javascript
复制
config=$(cat <<'EOS'
external_url 'https://xxxxxxxxx'
nginx['listen_port'] = 80
nginx['listen_https'] = false
nginx['proxy_set_headers'] = {
 'Host' => '$http_host_with_default',
 'X-Real-IP' => '$remote_addr',
 'X-Forwarded-For' => '$proxy_add_x_forwarded_for',
 'X-Forwarded-Proto' => 'https',
 'X-Forwarded-Ssl' => 'on',
 'Upgrade' => '$http_upgrade',
 'Connection' => '$connection_upgrade'
}
EOS
)

# Started with
docker run --rm -d --memory="5G" \
    --name testgitlab \
    --publish 10.0.0.1:9001:80 \
    -e "GITLAB_SSL=true" \
    -e "GITLAB_OMNIBUS_CONFIG=$config" \
    gitlab/gitlab-ce:latest

同样的事情也发生了。当容器到达100%的系统负载时,我立即停止了它(这次没有cpu限制):

起初,我认为这是GitLab中的一个bug,但我在自己的笔记本电脑上尝试了同样的操作,当达到内存限制时,OOM杀手立即杀死了一个容器进程。这个问题也从未出现在我的旧服务器上,它曾经运行GitLab容器。

这篇文章中提到的所有系统都没有任何特殊的停靠设置,已经禁用了交换,并且只修改了网络子系统中的sysctl设置。

  • 旧服务器: Debian 10
    • 内核来自buster-backport(5.10.0-0.bpo.9-amd64 64)
    • 文件系统: md-raid 1 (2x nvme ssds)上的btrfs

  • 当前服务器: Debian 11
    • 内核来自斗牛眼(5.10.0-9-AMD 64)和斗牛背靠背(5.14.0-0.bpo.2- and 64)内核。两个内核都会出现问题。
    • 文件系统: md-raid 1 (2x nvme ssds)上的lvm上的btrfs

  • 我的笔记本电脑: Arch
    • 内核: 5.15.5-arch1-1
    • 文件系统:在nvme ssd上的lvm上的ext4

当GitLab达到其内存限制时,如何避免主机冻结?为什么它只影响我的当前服务器?

更新:我可以使用sonatype/nexus容器再现这种行为。所以这不是GitLab的问题。

UPDATE 2:我注意到页面缓存丢失了一个尖峰。也许是原因,只是与cgroup?但是为什么我的旧服务器或者笔记本电脑没有受到影响呢?

UPDATE 3:当我用mdraid1+lvm+btrfs旋转一个VM时,我可以复制它!进一步调查..。

EN

回答 1

Unix & Linux用户

发布于 2021-12-01 23:43:47

听起来像是在回忆。容器内存不足,因此需要使用交换空间。写入交换空间会导致较高的内核和磁盘活动,因为内存交换是内核的一个函数,并且它交换到磁盘。

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

https://unix.stackexchange.com/questions/679761

复制
相关文章

相似问题

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