背景
DataEase 默认安装包自带了 Kettle 及 Doris,这两个组件在进行数据同步及大量的数据查询时会造成大量的 CPU 资源的消耗,资源耗尽的情况下会影响 DataEase 本身应用的正常运行,针对此问题,我们需要对 Kettle 及 Doris 进行 CPU 资源的使用限制,防止因资源耗尽导致应用无法访问的问题发生。
解决办法
docker-compose 内置了一个参数 cpus(容器可使用的cpu核数),用来限制容器的 cpu 资源使用情况,理想状态下,我们只需要修改 docker-compose-doris.yml、docker-compose-kettle.yml 这两个配置文件,分别对 doris-fe、doris-be、kettle 加上 cpus 的限制,即可解决该问题。如图所示:
实战测试
执行 for i in seq 1 $(cat /proc/cpuinfo |grep "physical id" |wc -l)
; do dd if=/dev/zero of=/dev/null & done 命令将 doris-fe 容器的 CPU 打满,执行 docker stats 查看容器的 CPU 使用情况:
可以看到 doris-fe 的容器 cpu 使用率已经达到了 213% ,此时执行 top 查看服务器的整体 cpu 使用率:
可以看到,尽管 doris-fe 的容器的 CPU 使用率已经到了 200%+,但是宿主机的CPU使用率仍然有 30%+ 的空闲,此时我们尝试打开下 DataEase 的网页。
可以看到,使用直连模式制作的数据集,仪表板仍然可以正常打开,不受影响,但是 Excel 数据集等存储在 Doris 里的数据则无法正常打开,并且会超时。
小结
通过限制容器可使用的 cpus 方式可以有效的防止宿主机的 CPU 资源耗尽的问题,不影响服务的整体访问,但是在容器的 CPU 打满的情况下,使用定时同步数据集或 excel 数据集制作的仪表板查看时会加载缓慢甚至无法加载。
建议适当扩充服务器的资源配置,并结合 docker-compose 的 cpus 属性来一起使用,以此达到最佳的效果。