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

内核日志没有指示任何OOM杀死。我还注意到磁盘io中有一个尖峰,我无法解释。
我尝试创建一个更小的示例,没有任何现有的GitLab数据,也没有Nomad:
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设置。
当GitLab达到其内存限制时,如何避免主机冻结?为什么它只影响我的当前服务器?
更新:我可以使用sonatype/nexus容器再现这种行为。所以这不是GitLab的问题。
UPDATE 2:我注意到页面缓存丢失了一个尖峰。也许这是原因,只是与cgroup?但是为什么我的旧服务器或者笔记本电脑没有受到影响呢?
UPDATE 3:当我用mdraid1+lvm+btrfs旋转一个VM时,我可以复制它!进一步调查..。
发布于 2021-12-01 23:43:47
听起来像是在回忆。容器内存不足,因此需要使用交换空间。写入交换空间会导致较高的内核和磁盘活动,因为内存交换是内核的一个函数,并且它交换到磁盘。
https://unix.stackexchange.com/questions/679761
复制相似问题