【发布时间】:2018-07-09 12:55:48
【问题描述】:
我正在尝试通过 ansible on vagrant up 禁用 THP,因为它会干扰 Redis(如果启用,则会导致延迟和使用 redis 的内存问题)
禁用 THP 的命令是 "echo never > /sys/kernel/mm/transparent_hugepage/enabled"
但它似乎不适用于简单的 shell 角色,如下所示。
- name: Disable THP support (causes latency and mem usage issues with redis)
shell: echo never {{ ">" }} /sys/kernel/mm/transparent_hugepage/enabled
become: yes
become_method: sudo
become_user: root
这是ansible的输出:
TASK [Disable-THP : 禁用 THP 支持(导致延迟和内存使用) redis 的问题)] *** 更改:[127.0.0.1] => {"changed": true, "cmd": "echo never > /sys/kernel/mm/transparent_hugepage/enabled", “增量”:“0:00:00.003939”,“结束”:“2018-07-09 12:22:33.183451”,“rc”: 0,“开始”:“2018-07-09 12:22:33.179512”,“stderr”:“”, “stderr_lines”:[],“stdout”:“”,“stdout_lines”:[]}
之后我 ssh 进入虚拟机并启动 redis-server,它仍然给我警告信息。
警告您已启用透明大页面 (THP) 支持 核心。这将在 Redis 中产生延迟和内存使用问题。 要解决此问题,请运行命令 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' 作为 root,并将其添加到 您的 /etc/rc.local 以便在重新启动后保留设置。 禁用 THP 后必须重新启动 Redis。
我是否对 ansible 脚本做错了什么,或者任何人都可以帮助我了解为什么这个简单的 shell 命令不起作用?
兄弟, 维克多
更新: 我稍微修改了我的 ansible 角色,以检查文件的内容是否真的发生了变化。角色现在看起来像这样:
- name: Disable THP support (causes latency and mem usage issues with redis)
shell: |
echo "never" >> /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
become: true
become_user: root
become_method: sudo
根据输出,启用的文件实际上将值更改为 [never]。但是当我 ssh 进入虚拟机并 cat 启用的文件时,它显示该值仍然是 [always]
TASK [Disable-THP : 禁用 THP 支持(导致延迟和内存使用) redis 的问题)] *** 更改:[127.0.0.1] => {"changed": true, "cmd": "回显\"从不\" >> /sys/kernel/mm/transparent_hugepage/enabled\n cat /sys/kernel/mm/transparent_hugepage/enabled", "delta": “0:00:00.005309”,“结束”:“2018-07-10 10:41:27.801697”,“rc”:0, “开始”:“2018-07-10 10:41:27.796388”,“stderr”:“”,“stderr_lines”: [],“stdout”:“总是疯狂 [never]”,“stdout_lines”:[“总是 madvise [从不]"]}
为什么文件的内容显示它已更改,但是当我 SSH 进入 VM 时,它似乎告诉我不是这样?
[vagrant@test ~]$ cd ..
[vagrant@test home]$ cd ..
[vagrant@test /]$ cd sys/kernel/mm/transparent_hugepage/
[vagrant@test transparent_hugepage]$ cat enabled
[always] madvise never
【问题讨论】:
-
文件内容有变化吗?如果是,您的问题与 Ansible 有什么关系?如果没有,您做了什么来排除故障,为什么不在问题中?
-
我编辑了我的原始帖子以尝试回答您的问题,希望对您有所帮助。我对 ansible 很陌生,如果一开始不清楚,很抱歉。
-
还有一种方法可以“间接”禁用它。通过调谐。例如,Oracle 通过用于调整的专用配置文件禁用它。 access.redhat.com/solutions/2867881
标签: ansible ansible-2.x