docker启动缓慢问题排查
前言
最近入手一个树莓派4b板子,初衷是装个centos系统想拿来当个人开发机使用,偶尔业余写一些C++代码,在自己黑苹果编译有些库还不一样,之前遇到过一个用epoll。4G内存然后针对其它应用则直接用docker部署,简单还方便一点。但是遇到一个问题,每次重启一次系统,docker启动都是特别的慢(5-6分钟)。
问题发现
通过systemctl status docker
命令查看状态是启动中,再仔细看了一下发现有一行。
12月 22 13:54:53 localhost dockerd[609]: crypto/rand: blocked for 60 seconds waiting to read random data from the kernel
# 大概意思是:等待60秒从内核中获取随机数。
一开始自己猜测会不会是CPU性能问题导致,后面查了一下,前辈也有遇到logstash启动缓慢的问题,也同样说等待60秒从内核中获取随机数。从那篇博文中了解到一个关于熵的知识点。
熵知识点学习
熵代表事件的随机性。
- 在计算中,熵是操作收集的随机性,用于的系统或应用程序、密码学或其他用途,需要随机数据。这种随机性经常从硬件中收集消息来源,或者是预先存在的消息来源作为鼠标移动或特别提供随机生成器。
- 在信息论中,熵是一种衡量不确定性随机变量。这个词由在这种情况下通常指的是香农熵,其中量化,在某种意义上期望值,信息包含在消息中,通常在比特等单位。
如果结果比较低 (<1000),建议安装 haveged. 否则加密程序会等待系统有足够的熵。例如如果使用 软件热点,网速会比较慢。
# 通过如下命令可以查看系统的熵值
cat /proc/sys/kernel/random/entropy_avail
输出结果
29
问题解决
haveged项目的目的是提供一个简单易用的不可预测 随机数生成器,基于 HAVEGE 算法。Haveged可以解决在某些情况下,系统熵过低的问题。
延伸知识,在wiki中还提到采用Rng-tools方式,用于增加内核中的熵数量以使其/dev/random更快。
# 加入源
yum install epel-release -y
# 下载haveged
yum install haveged -y
# 启动
systemctl start haveged
# 开机自启动
systemctl enable haveged
验证效果:
# 通过如下命令可以查看系统的熵值
cat /proc/sys/kernel/random/entropy_avail
输出结果
2437
参考文章:
什么是熵的计算机科学定义?