【问题标题】:Why is ansible slow with simple tasks为什么简单任务的ansible慢
【发布时间】:2022-06-14 17:40:41
【问题描述】:

在使用 ansible 大约一周后,我发现 ansible 花费的时间差不多,无论它应该执行的任务有多复杂。

  • 使用 apt 安装 20 个软件包 - 3 秒
  • 使用模板复制具有 2 个配置设置的单个文件 - 3 秒。

虽然我可以使用一个命令轻松安装 20 个软件包,但
模板需要循环运行,所以如果我要复制 20 个配置文件,则需要一整分钟。

将其扩展到 10 个角色, 其中一些重复了5次 你可以花一个多小时来做一个简单的部署。

ansible 应该这么慢, 或者我可以做些什么来提高性能?

编辑:
根据您的回答,我认为这不是正常行为。 以下是@U880D 要求的那些简单任务的一些代码示例。 正如我所说,没有什么特别的,只是简单的配置:

# tasks/main.yml

- name: Configure php-{{ php_version }}
  template:
    src: '{{ item }}.j2'
    dest: '/etc/php/{{ php_version }}/{{ item }}'
  loop:
    - cli/conf.d/50-memory.ini
    - fpm/conf.d/50-memory.ini
    - fpm/conf.d/50-opcache.ini
    - fpm/pool.d/www.conf
  notify:
    - restart php {{ php_version }}
# templates/fpm/conf.d/50-memory.ini.j2

memory_limit = {{ php_fpm_memory_limit }}
post_max_size = {{ php_fpm_post_max_size }}
upload_max_filesize = {{ php_fpm_upload_max_filesize }}
max_file_uploads = {{ php_fpm_max_file_uploads }}
# templates/fpm/conf.d/50-opcache.ini.j2

[opcache]
opcache.enable=1
opcache.memory_consumption={{ php_opcache_memory_limit }}
opcache.validate_timestamps=1
opcache.revalidate_freq=1
opcache.huge_code_pages=1

编辑2:
我不确定这是否是 task_profile 应该做的,但这里是该命令在名为 management-1 的服务器上的输出。 我在获得准确的时间之后添加了一个调试任务。 4 个甚至不需要更新的模板耗时约 7.3 秒:

TASK [php : Configure php-8.1] ************************************************************************************************************************************************************************************
Tuesday 22 March 2022  10:17:33 +0100 (0:00:02.730)       0:00:06.616 ********* 
ok: [management-1] => (item=cli/conf.d/50-memory.ini)
ok: [management-1] => (item=fpm/conf.d/50-memory.ini)
ok: [management-1] => (item=fpm/conf.d/50-opcache.ini)
ok: [management-1] => (item=fpm/pool.d/www.conf)

TASK [php : Debug] ************************************************************************************************************************************************************************************************
Tuesday 22 March 2022  10:17:40 +0100 (0:00:07.308)       0:00:13.924 ********* 

【问题讨论】:

  • 您需要更多数据才能了解发生了什么。尝试回调profile_tasksprofile_roles。如果这没有帮助,您可以从 ansible-runner artifacts 获取更多详细信息。
  • 能否提供相关任务的源代码?关于“Ansible 应该这么慢,还是我可以做些什么来提高性能?”,没有任何相关信息,这里无法回答。

标签: ansible


【解决方案1】:

我们刚刚从 ansible 2.7.7 切换到 2.10.7,似乎 template 任务特别慢了很多,以至于整个剧本的时间是以前的两倍。

我怀疑这是 ansible 中的一个错误,需要跟踪和修复(尽管我必须检查它是否真的在更新的 ansible 版本中得到修复)。

【讨论】:

    【解决方案2】:

    你说得对,Ansible 很慢(简直是地狱)。这是设计使然。他们决定通过 ssh 将 python 代码复制到远程主机上执行操作:

    • 代码需要进行 base64 编码/解码 - CPU 负载/时间/臃肿的网络。
    • 广泛派生/执行的进程。

    循环中的每个项目都作为单独的任务执行。

    放松一下,喝杯咖啡。或更新您ansible.cfg 并祈祷:

    [ssh_connection]
    pipelining = True
    
    [defaults]
    nocows = True
    interpreter_python = /usr/bin/python3
    gathering = False
    forks = 2
    strategy = free
    

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 2020-09-06
      • 2022-11-11
      • 2012-06-13
      • 1970-01-01
      • 2015-03-15
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多