docker的资源限制参数设置错误,导致的clickhouse性能瓶颈

使用场景

  • 我们使用docker作为服务的虚拟化工具,服务都部署在docker里
  • 我们使用docker-compose管理所有docker服务的配置文件
  • 针对某些服务,我们要限制这个docker占用的资源数量,例如,cpu和内存
  • 在进行配置时,网上搜了一些文章,进行了设置,导致了本次错误
  • 由于是公司测试环境,主要做一些功能测试,不用于性能测试,故只设置了很小的资源
  • 针对clickhouse数据库的docker配置如下:
yml 复制代码
  clickhouse:
    image: yandex/clickhouse-server
    container_name: clickhouse
    ports:
      - 8123:8123
      - 9000:9000
    ulimits:
      nofile:
        soft: 262144
        hard: 262144
    deploy:
      resources:
        limits:
          cpus: "0.6"
          memory: 2G
    volumes:
      - ./volumes/ck/data:/var/lib/clickhouse
      - ./volumes/ck/log/:/var/log/clickhouse-server/
      - ./volumes/ck/etc/:/etc/clickhouse-server/
      - /etc/localtime:/etc/localtime
    restart: on-failure

问题现象

  • 之前是把clickhouse部署在服务器上,使用了近一年,没什么问题
  • 前段时间,为了统一部署环境,将clickhouse使用docker部署
  • 在写入和查询并发量不大的情况下,发现clickhouse查询较慢
  • 查看了query_log,发现10万条数据,就用了600ms,很不应该

解决处理

  • 和同事交流后,发现cpus参数设置不合理
  • 我之前看着网上的一些文章和翻译,以为这个数字要取小数,是一个比值,是 "服务器cpu总数量 x 比值",为该docker容器使用的cpu数量
  • 在同事建议下,去看了官方英文文档,果然,我理解错了,这个就是简单的指 cpu数量
  • 官方文档地址:https://docs.docker.com/compose/compose-file/deploy/#cpus

cpus configures a limit or reservation for how much of the available CPU resources, as number of cores, a container can use.

  • 核心是这句number of cores,很明确,就是数量
  • 还有一点需要说明的是,clickhouse的内存使用限制,要大于16G,否则也可能存在性能瓶颈和各种意外的报错
  • 仍然贴一篇官方文档:https://clickhouse.com/docs/en/operations/tips#ram

danger

If your system has less than 16 GB of RAM, you may experience various memory exceptions because default settings do not match this amount of memory. The recommended amount of RAM is 32 GB or more. You can use ClickHouse in a system with a small amount of RAM, even with 2 GB of RAM, but it requires additional tuning and can ingest at a low rate.

  • 优化后配置为

    复制代码
     deploy:
        resources:
          limits:
            cpus: "8.0"
            memory: 16G
  • 查询飞快,问题解决了

  • 当然,针对生产环境,这个配置就不够用了。要针对自己的业务量,进行一个预估,申请足够的cpu和内存配置的服务器

相关推荐
2501_941142135 小时前
基于 Rust 构建高性能区块链节点与智能合约执行系统的架构设计与工程实践分析
eureka
2501_941148159 小时前
AI与大数据:推动智慧城市发展的双引擎
eureka
2501_9411437311 小时前
5G时代的网络安全挑战与解决方案:守护数字未来
eureka
一夜空中最亮的星一13 小时前
【Linux】ubuntu24.04 安装docker
linux·docker·eureka
会飞的小蛮猪13 小时前
Ubuntu24.04基于Docker部署K8s(使用私服部署)
经验分享·docker·云原生·容器·kubernetes
2501_9411458516 小时前
微服务链路追踪与分布式调用可观测性在高并发优化实践经验分享
eureka
weixin_4365250716 小时前
使用 idea 命令行构建 Docker 镜像并部署到云服务器
linux·docker·github
2501_9411444217 小时前
物联网与智能家居:改变生活方式的数字化革命
eureka
2501_9411426418 小时前
云原生与Serverless架构在高并发互联网系统中的设计优化与工程实践经验分享
eureka
h***015418 小时前
Docker启动安装nacos(详情讲解,全网最细)
运维·docker·容器