Три возможности, которые приходят на ум для меня:
emacs
(который Вы проверили),emacs
emacs
двоичный файл не находится в хеш-таблице ПУТИ Вашей оболочки.Можно проверить, есть ли у Вас функция emacs
:
bash-3.2$ declare -F | fgrep emacs
declare -f emacs
И удалите его:
unset -f emacs
Ваша оболочка также имеет хеш-таблицу ПУТИ, которая содержит ссылку на каждый двоичный файл в Вашем ПУТИ. Если Вы добавляете новый двоичный файл с тем же именем как существующее в другом месте в Вашем ПУТИ, оболочке нужно сообщить путем обновления хеш-таблицы:
hash -r
Дополнительное объяснение:
which
не знает о функциях, поскольку это не встроенный удар:
bash-3.2$ emacs() { echo 'no emacs for you'; }
bash-3.2$ emacs
no emacs for you
bash-3.2$ which emacs
/usr/bin/emacs
bash-3.2$ `which emacs` --version | head -1
GNU Emacs 22.1.1
Новое двоичное поведение хеш-таблицы продемонстрировано этим сценарием.
bash-3.2$ PATH=$HOME/bin:$PATH
bash-3.2$ cd $HOME/bin
bash-3.2$ cat nofile
cat: nofile: No such file or directory
bash-3.2$ echo echo hi > cat
bash-3.2$ chmod +x cat
bash-3.2$ cat nofile
cat: nofile: No such file or directory
bash-3.2$ hash -r
bash-3.2$ cat nofile
hi
bash-3.2$ rm cat
bash-3.2$ cat nofile
bash: /Users/mrb/bin/cat: No such file or directory
bash-3.2$ hash -r
bash-3.2$ cat nofile
cat: nofile: No such file or directory
Хотя я не назвал его, which cat
всегда возвращал бы первое cat
в моем ПУТИ, потому что это не использует хеш-таблицу оболочки.
Для создания опций, таких как это постоянными, Вы будете обычно добавлять их к файлу /etc/sysctl.conf
. Вы видите полный список опций доступное использование этой команды:
$ sysctl -a
$ sudo sysctl -a | head -5
kernel.sched_child_runs_first = 0
kernel.sched_min_granularity_ns = 6000000
kernel.sched_latency_ns = 18000000
kernel.sched_wakeup_granularity_ns = 3000000
kernel.sched_shares_ratelimit = 750000
Можно искать hugepage
в выводе как так:
$ sudo sysctl -a | grep hugepage
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0
Однако просматривая вывод я не видел transparent_hugepage
. Поиск с помощью Google немного больше, я действительно сталкивался с этой страницей Oracle, которая обсуждает эту самую тему. Страница названа: Конфигурирование HugePages для Oracle на Linux (x86-64).
Конкретно на той странице они упоминают, как отключить hugepage опцию.
выборка
Предпочтительный метод отключить Прозрачный HugePages состоит в том, чтобы добавить "transparent_hugepage=never" к строке начальной загрузки ядра в "/etc/grub.conf" файле.
title Oracle Linux Server (2.6.39-400.24.1.el6uek.x86_64) root (hd0,0) kernel /vmlinuz-2.6.39-400.24.1.el6uek.x86_64 ro root=/dev/mapper/vg_ol6112-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=uk LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_NO_DM rd_LVM_LV=vg_ol6112/lv_swap rd_LVM_LV=vg_ol6112/lv_root rhgb quiet numa=off transparent_hugepage=never initrd /initramfs-2.6.39-400.24.1.el6uek.x86_64.img
Сервер должен быть перезагружен, чтобы это вступило в силу.
Кроме того, можно добавить команду к Вашему /etc/rc.local
файл.
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
Я думаю, что пошел бы с 2-й опцией, так как первое подвергнется риску сбрасываться, когда Вы обновите от одного ядра до следующего.
Можно подтвердить, что это работало со следующей командой после перезагрузки:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
Вот реализация с использованием марионетки:
exec { "disable_transparent_hugepage_enabled":
command => "/bin/echo never > /sys/kernel/mm/transparent_hugepage/enabled",
unless => "/bin/grep -c '\[never\]' /sys/kernel/mm/transparent_hugepage/enabled 2>/dev/null",
}
exec { "disable_transparent_hugepage_defrag":
command => "/bin/echo never > /sys/kernel/mm/transparent_hugepage/defrag",
unless => "/bin/grep -c '\[never\]' /sys/kernel/mm/transparent_hugepage/defrag 2>/dev/null",
}
Я просто хотел добавить к этому вопросу, так как я пытался отключить прозрачные горы на CentOS V6, чтобы включить Токудб для Мариада. Я добавил скрипт, упомянутый @SLM на /etc/rc.local
, и он отключил прозрачные гостеприимные страницы. Однако из-за того, как сценарии запуска работают в Linux, /etc/rc.local
выполняется после начала всех сервисов. Поэтому прозрачные огромные страницы отключали после начала Mariadb, и двигатель Tokudb не будет инициализировать. Единственным другим способом отключения прозрачных гостей является добавлением Transparent_hugePage = никогда
к параметру ядра.
Я заметил @ rwky's Comment Вы можете сделать первый вариант, выжившие обновления ядра, добавив Transparent_hugePage = никогда опции GRUB_CMDLINE_LINUX_DEFAULT в / etc / default / grub на большинстве распределений.
И узнают, что CentOS не поддерживает файл / etc / default / grub
и был обеспокоен transparent_hugepage = никогда
исчезает из параметров ядра, когда он обновляется. Но не беспокоиться, CentOS настроен, чтобы сохранить любые изменения, внесенные в параметры ядра в Grub, поэтому, когда он обновляется, они содержатся.
Также добавить, правильный способ изменить параметры ядра для GRUB с Grubby
. Я создал этот простой скрипт, чтобы добавить transparent_hugePage = никогда
к каждому ядру с Grubby
:
#!/bin/sh
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
for KERNEL in /boot/vmlinuz-*; do
grubby --update-kernel="$KERNEL" --args='transparent_hugepage=never'
done
Они оба работают на меня:
du -h | perl -ne '$n=()=$_=~m#/#g; print unless $n > 2'
du -h | perl -ne 'print unless ($n=()=$_=~m#/#g) > 2 '
-121--36369- Можете ли вы объяснить, что вы имеете в виду под USB-палочкой с FreeBSD на ней. Вы имеете в виду установщик FreeBSD или версию Live FreeBSD?
Если вы хотите установить FreeBSD, загрузите версию memstick.img из здесь .
Если требуется версия Live FreeBSD, загрузите образ из здесь .
После загрузки выгрузки образа на USB-накопитель с помощью команды dd
:
dd if=~/freebsd-memstick.img of=/dev/usb bs=1M
usb также может быть /dev/sdb
или /dev/sdc
... Сначала проверьте, какая буква диска будет у вашего USB-накопителя, в противном случае вы можете удалить неправильный диск.
Поскольку строка ядра transparent _ hugepage = never
отключает только половину того, что мне нужно (и то, и другое, для назойливого сбоя mongodb/logs), что я не сохранил через systemd
startup script, но теперь имеют: echo никогда | suddo tee/ sys/kernel/mm/transparent_hugepage/enabled
. Это работает либо в сценарии загрузки systemctl (если он правильно настроен в /etc/systemd/system
), либо прямо из cli как есть.
В SLES11 SP3 с загрузчиком YAST и GRUB мы должны добавить transparent_hugepage = never
в [YAST-bootloader-edit- line с необязательным параметром ядра]. ПРИМЕЧАНИЕ. Этот инструмент изменяет файл /boot/grub/menu.lst
.
Только после внесения этого изменения и перезагрузки THP отключился.
Возможно, вы исчерпаете пространство среды с большим количеством файлов, что позволит расширить имя файла для выполнения этой задачи (например, в некоторых UNIX-системах). По этой причине я бы использовал «find» для определения файлов, которые вы хотите удалить.
Чтобы просмотреть файлы, которые будут удалены, можно запустить
find $(find /specified/directory -d -name "[0-9][0-9][0-9][0-9]") -name "[E|P]*" -print
, чтобы удалить их, чтобы расширить их с помощью опции -exec
find $(find /specified/directory -d -name "[0-9][0-9][0-9][0-9]") -name "[E|P]*" -exec rm -i {} \;
-121--247405- Почему бы просто не создать программную ссылку с ln?
Вместо копирования из другого ответа здесь ссылка. Stackoverflow: как создать ссылку на каталог
-121--243772-Вот еще одно марионеточное решение в Кузнице: https://forge.puppetlabs.com/ramseymcgrath/remove_hugepage/
Просто используйте
include remove_hugepage
в определении марионеточного узла.
Все вышеперечисленное не сработало для меня на EC2 Ubuntu 16.04, но это сработало:
sudo apt install hugepages
sudo hugeadm --thp-never
В случае Redis он также выдает предупреждение, предлагающее отключить THP. Но, как отмечено в отчете об ошибке , во многих дистрибутивах /etc/rc.local
выполняется после служб и не влияет на них, пока они не перезапустятся. Также обратите внимание, что в виртуализированных средах (например, Digitalocean) вы не можете управлять настройками GRUB.
В этом случае решением является использование специального сценария init для отключения прозрачных огромных страниц , как эта страница предлагает, с помощью настроек X-Start- До
. Например, сценарий Debian init для Redis:
#!/bin/bash
### BEGIN INIT INFO
# Provides: disable-thp
# Required-Start: $local_fs
# Required-Stop:
# X-Start-Before: redis-server
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Disable THP
# Description: disables Transparent Huge Pages (THP) on boot
### END INIT INFO
case $1 in
start)
if [ -d /sys/kernel/mm/transparent_hugepage ]; then
echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
else
return 0
fi
;;
esac
Благодаря github и PyYoshi
Я нашел этот пример для systemd
Создайте файл
sudo vim /etc/systemd/system/disable-transparent-huge-pages.service
Поместите это в сервисный файл
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/usr/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
Для пользователей Debian/Ubuntu
[Unit]
Description=Disable Transparent Huge Pages
[Service]
Type=oneshot
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"
[Install]
WantedBy=multi-user.target
Затем включите службу
systemctl enable disable-transparent-huge-pages
systemctl start disable-transparent-huge-pages
systemctl status disable-transparent-huge-pages
Вот лайфхак для Ansible (Я не хочу управлять шаблоном для/etc/rc.local
):
- name: Disable Transparent Huge Pages at boot
lineinfile:
dest: /etc/rc.local
line: "if [ -d /sys/kernel/mm/transparent_hugepage ]; then echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled ; echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag ; fi"
register: transparent_hugepage
- name: Disable disabled rc.local
lineinfile:
dest: /etc/rc.local
line: 'exit 0'
state: absent
- name: Disable Transparent Huge Pages at run time 1/2
command: echo never > /sys/kernel/mm/transparent_hugepage/defrag
when: transparent_hugepage|changed
- name: Disable Transparent Huge Pages at run time 2/2
command: echo never > /sys/kernel/mm/transparent_hugepage/enabled
when: transparent_hugepage|changed
Если вы столкнулись с проблемой
-bash: /sys/kernel/mm/transparent_hugepage/khugepaged/defrag: Permission denied
даже с помощью sudo попробуйте приведенные ниже команды:
sudo /bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
sudo /bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
, затем состояниеalways
или это, которое это включено (отмечают[]
скобки вокругalways
) – ub3rst4r 30.10.2014, 07:08sudo update-grub
получить новые настройки, "записанные в камне". +1 для указания на строку файла личинки. – Faron 13.07.2015, 20:25