Назад | Перейти на главную страницу

В любом случае, чтобы перенаправить сбой выделения страницы: order: N 'извергнуть из файла «сообщений»?

В больших системах Linux, работающих под управлением Centos, мы иногда видим такие сообщения, как

kernel: <program_name>: page allocation failure: order:<N>, mode:0xNNNN

Чтение подобных статей:

https://utcc.utoronto.ca/~cks/space/blog/linux/DecodingPageAllocFailures

https://utcc.utoronto.ca/~cks/space/blog/linux/WhyPageAllocFailure

похоже, что эти сообщения в основном являются ложными предупреждениями, вызванными неправильной логикой проверки памяти в ядре.

Я понимаю, что сообщения типа "порядок: 0" имеют большое значение, но мы никогда их не получаем.

Мы действительно получаем бесполезные сообщения более высокого порядка, подобные приведенному выше, которые являются просто выбросом «никаких действий», засоряющим наш файл / var / log / messages.

Страница за страницей игнорируемых дампов стека трудно увидеть реальные ошибки. Это снижает надежность системы.

Итак, есть ли способ перенаправить только эти сообщения из файла / var / log / messages?

«Поддельный» или «плохой» - это не тот вывод, который Крис сделал в блоге, на который вы указали. Они объяснили, что распределитель, пытающийся сначала выполнить младший, не является интуитивным.

Определите свою рабочую нагрузку, взглянув на эти:

  • Какая программа пользовательского пространства
  • Трассировка вызовов, включая подсистемы ядра, отправившие запросы
  • Порядок размещения размера
  • Свободные фрагменты каждого порядка в зонах памяти
  • Планирование объема памяти, включая итоги от /proc/meminfo

Предоставьте эти сведения службе поддержки вашего дистрибутива или здесь, на странице Server Fault. Идеи, которые можно попробовать, могут включать параметры настройки или более новое ядро.


Как и многие вещи, зарегистрированные в Linux, это printk() исходя из. warn_alloc() в mm/page_alloc.c нельзя подавить по отдельности, но вы можете подавить все сообщения с приоритетом ниже LOGLEVEL_WARNING (определяется как 4). Eсть sysctl для этого, так что создайте /etc/sysctl.d/printk.conf с чем-то вроде

# console_loglevel, default_message_loglevel, minimum_console_loglevel, default_console_loglevel
kernel.printk = 3       4       1       7

Обратите внимание, что это также подавит ряд других потенциально интересных предупреждений.

Или вы можете централизовать ведение журнала и оповещения и иметь возможность обрабатывать большое количество строк. printk + syslog - это больше, чем человек может прочитать, определите, как извлекать из шума интересующие вас сигналы.