docker-compose 特别慢问题

简介: 某环境执行docker-compose偶发性出现特别慢的情况,包括执行docker-compose -h等命令,慢到极端情况下有同学反馈要等几分钟。 使用strace多次重试抓请求 ```strace -r -f -s 2000 docker-compose -h``` 发现慢的时候hang在 ```[pid 18578] 0.000010 wait4(-1,``` 这种位

某环境执行docker-compose偶发性出现特别慢的情况,包括执行docker-compose -h等命令,慢到极端情况下有同学反馈要等几分钟。

使用strace多次重试抓请求
strace -r -f -s 2000 docker-compose -h
发现慢的时候hang在
[pid 18578] 0.000010 wait4(-1,
这种位置

如下截图为hang完之后完整的strace记录
image.png

和正常返回的记录进行对比(忽略里面时间戳参数改-tt)
image.png

发现异常请求有多次wait4、restart_syscall resumed等结果,观察到开头open了/dev/random,怀疑与此有关。

进行/dev/random测试发现果然有概率出现慢请求

[root@192-168-1-27 ~]# dd if=/dev/random of=/dev/null bs=1 count=1
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.00011125 s, 9.0 kB/s
[root@192-168-1-27 ~]# dd if=/dev/random of=/dev/null bs=1 count=1
1+0 records in
1+0 records out
1 byte (1 B) copied, 42.9461 s, 0.0 kB/s
[root@192-168-1-27 ~]# dd if=/dev/random of=/dev/null bs=1 count=1
1+0 records in
1+0 records out
1 byte (1 B) copied, 0.000119397 s, 8.4 kB/s

启动一个随机数生成器,测试发现/dev/random返回时间恢复正常,可以绕过该问题。

yum install rng-tools
systemctl enable rngd
systemctl start rngd

想尝试定位docker-compose里random部分代码,除了找到一处使用了random的地方其他都没定位到 https://github.com/docker/compose/blob/1.24.0/compose/utils.py#L158 暂时不细究待线上验证是否解决。

目录
相关文章
|
22天前
|
存储 机器学习/深度学习 中间件
快速上手 Elasticsearch:Docker Compose 部署详解
本文介绍了如何使用Docker Compose快速搭建Elasticsearch学习环境。Elasticsearch是一款用于实时搜索和分析的分布式中间件,适用于多种场景,如搜索、日志分析、机器学习等。首先,创建docker网络,拉取最新版8.12.2镜像。接着,编写docker-compose.yml文件,配置单节点集群,设置端口映射、内存限制及数据卷挂载。然后,创建并配置数据卷目录,允许远程访问和跨域。最后,启动服务并验证,通过浏览器访问确认服务运行正常。本文为初学者提供了一个简便的Elasticsearch部署方法。
126 4
快速上手 Elasticsearch:Docker Compose 部署详解
|
27天前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
113 0
|
3月前
|
存储 数据可视化 数据安全/隐私保护
使用 Docker Compose 部署 Docker Registry
【1月更文挑战第2天】 在内网环境中,我们期望能够在本地共享镜像。为了解决这一问题,Docker Registry成为了我们的救星。Docker Registry是一个用于存储和管理Docker镜像的开源工具。通过在本地部署Docker Registry,您可以轻松地构建、存储和分享自己的Docker镜像。
147 3
使用 Docker Compose 部署 Docker Registry
|
4月前
|
Kubernetes 关系型数据库 MySQL
Docker Compose入门:打造多容器应用的完美舞台
Docker Compose 是一个强大的工具,它允许开发者通过简单的 YAML 文件定义和管理多容器的应用。本文将深入讨论 Docker Compose 的基本概念、常用命令以及高级应用场景,并通过更为丰富和实际的示例代码,助您轻松掌握如何通过 Docker Compose 打造复杂而高效的多容器应用。
|
1月前
|
Java Docker 微服务
如何使用Docker和Docker Compose部署微服务
【2月更文挑战第12天】
173 0
|
4月前
|
应用服务中间件 Linux nginx
Docker Compose 安装与使用(常用指令)
Docker Compose 安装与使用(常用指令)
217 0
|
4月前
|
前端开发 Docker Windows
Windows 安装 Docker Compose
Windows 安装 Docker Compose
|
2月前
|
Docker 容器
Docker Compose的安装与配置
Docker Compose的安装与配置
117 2
Docker Compose的安装与配置
|
2月前
|
存储 监控 Serverless
Serverless应用引擎(SAE)不支持直接通过Docker Compose进行部署
【2月更文挑战第8天】Serverless应用引擎(SAE)不支持直接通过Docker Compose进行部署
125 1
|
2月前
|
消息中间件 运维 应用服务中间件
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
容器化运维:构建高可用RabbitMQ集群的Docker Compose指南
138 0