首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使“/sys/内核/mm/透明_ how /defrag”状态不再关闭THP警告

如何使“/sys/内核/mm/透明_ how /defrag”状态不再关闭THP警告
EN

Ask Ubuntu用户
提问于 2018-09-13 18:37:34
回答 2查看 4.5K关注 0票数 2

重新启动linux (ubuntu16.04redis 4.011)

代码语言:javascript
复制
/var/log/redis.log

显示

代码语言:javascript
复制
# WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

所以我知道

way1:

代码语言:javascript
复制
/etc/rc.local

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
   echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

当重新启动机器时

代码语言:javascript
复制
the /var/log/redis.log shows the THP warning still.

但当我用

代码语言:javascript
复制
$cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$cat /sys/kernel/mm/transparent_hugepage/defrag
always defer madvise [never]

我有权利

代码语言:javascript
复制
$systemctl restart redis

the /var/log/redis.log shows no THP warning.

但这是不正确的问题,因为当机器重新启动仍然有THP警告。

所以我尝试way2:先删除/etc/rc.local if...fi语句

代码语言:javascript
复制
$apt install sysfsutils

将这两行添加到/etc/sysfs.conf:

代码语言:javascript
复制
kernel/mm/transparent_hugepage/enabled = never  
kernel/mm/transparent_hugepage/defrag = never

重新启动

代码语言:javascript
复制
/var/log/redis.log got no any new message???

我怎样才能再得到我的日志呢?糖浆吃了吗?

代码语言:javascript
复制
$systemctl status redis

红星是活跃的。

代码语言:javascript
复制
$cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$cat /sys/kernel/mm/transparent_hugepage/defrag
always defer [madvise] never

我有?

然后

代码语言:javascript
复制
$systemctl restart redis
$cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
$cat /sys/kernel/mm/transparent_hugepage/defrag
always defer [madvise] never

又来了?为碎片的选择不是对的??!

当我更改/etc/sysfs.conf上的已启用和defrag时,这是非常困难的:

代码语言:javascript
复制
kernel/mm/transparent_hugepage/defrag = never   
kernel/mm/transparent_hugepage/enabled = never 

我得到了正确的猫结果$systemctl重新启动redis $cat /sys/ $cat /mm/透明_sys/启用始终建议$cat/sys/内核/mm/透明_sys/defrag总是推迟

但是,在重新启动linux时,仍然没有向我的/var/log/redis.log添加任何消息。

但是,当我命令"systemctl重新启动redis“时,可以添加新消息。

为什么情况这么奇怪?哪一种是正确的,如何解决?

EN

回答 2

Ask Ubuntu用户

发布于 2021-05-13 04:03:13

所以当你问我这个问题时,我去了github和论坛寻找答案,实际上它是由所有这些问题混合而成的。

我认为你走的很好,但是每个人都要做的主要错误是在应用新的THP规则之后不重新启动redis服务。

1.添加rc.local

首先,在ubuntu20.04上,默认情况下rc.local不存在,我按照这些步骤(参考)修正了这个问题。

作为根

1.1.为rc-local

提供系统服务

添加/etc/systemd/system/rc-local.service

代码语言:javascript
复制
[Unit]  
 Description=/etc/rc.local Compatibility  
 ConditionPathExists=/etc/rc.local  

[Service]  
 Type=forking  
 ExecStart=/etc/rc.local start  
 TimeoutSec=0  
 StandardOutput=tty  
 RemainAfterExit=yes  
 SysVStartPriority=99  

[Install]  
 WantedBy=multi-user.target  

1.2.活动it

代码语言:javascript
复制
touch /etc/rc.local  
chmod +x /etc/rc.local  
systemctl enable rc-local  

1.2.1在该文件(rc.local)中,可以添加

代码语言:javascript
复制
#!/bin/bash  
echo never > /sys/kernel/mm/transparent_hugepage/enabled  
echo never > /sys/kernel/mm/transparent_hugepage/defrag  
systemctl restart redis-server.service  
exit 0  
票数 1
EN

Ask Ubuntu用户

发布于 2023-01-25 20:08:21

使用更简单:

代码语言:javascript
复制
# cat /etc/tmpfiles.d/disable-thp.conf
#Type Path                                                  Mode UID GID  Age Argument
w     /sys/kernel/mm/transparent_hugepage/enabled           -    -   -    -   never
w     /sys/kernel/mm/transparent_hugepage/defrag            -    -   -    -   never

# systemd-tmpfiles --create --prefix=/sys/kernel/mm/transparent_hugepage/ /etc/tmpfiles.d/disable-thp.conf

# grep -E . /sys/kernel/mm/transparent_hugepage/defrag /sys/kernel/mm/transparent_hugepage/enabled
/sys/kernel/mm/transparent_hugepage/defrag:always defer defer+madvise madvise [never]
/sys/kernel/mm/transparent_hugepage/enabled:always madvise [never]

当然,不需要总是手动运行systemd-tmpfiles,它将在引导时由systemd-tmpfiles-setup.service运行。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1075039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档