Обнаружил совершенно дурацкий эффект в Ubuntu 10.04. При том, что минимальный заявленый объем оперативной памяти 128MiB, в виртуалке с 256MiB RAM на стадии загрузки регулярно срабатывал oom-killer.
Jun 9 16:51:43 ... kernel: [ 4.550302] kthreadd invoked oom-killer: gfp_mask=0xd0, order=1, oom_adj=0 Jun 9 16:51:43 ... kernel: [ 4.551806] kthreadd cpuset=/ mems_allowed=0 Jun 9 16:51:43 ... kernel: [ 4.555073] Pid: 2, comm: kthreadd Not tainted 2.6.32-22-generic-pae #36-Ubuntu Jun 9 16:51:43 ... kernel: [ 4.557401] Call Trace: Jun 9 16:51:43 ... kernel: [ 4.558500] [] oom_kill_process+0xa4/0x2b0
Чаще всего, oom-killer выносил plymouthd или ureadahead, но иногда под горячую руку попадал hal и udev. Самое смешное, что после завершения загрузки объем занятой памяти составляет 40-60MiB, так что нехватка памяти при загрузке выглядит, как минимум, странно.
Выяснилось, что проблема не нова и достает не только меня (491943). Виноват ureadahead. Видимо, разработчик очень буквально понял документацию. При запуске программа выставляет размер буфера debugfs в 128MiB (точно как в примере из документации). Те самые 128MiB, что указаны в минимальных системных требованиях. Убедиться в этом можно посмотрев содержимое файла /sys/kernel/debug/tracing/buffer_size_kb, после срабатывания oom-killer.
Значение зашито в код, так что единственый способ заткнуть проблему, пеерсобрать ureadahead из исходников.
sudo apt-get build-dep ureadahead apt-get source ureadahead # В файле src/trac.c следует найти строку buffer_size_kb и заменить значение # 128000 на какое-то поменьше (я ограничился 16384). # После можно собрать пакет и установить его debian/rules build fakeroot debian/rules binary sudo dpkg --install ../ureadahead_0.100.0-4.1_i386.deb
Понятно, что на полноценное решение это не тянет, но как залепуха вполне сгодится.
P.S.Похоже проблему таки добьют в Ubuntu 10.10, также исправление должно войти в Ubuntu 10.04.2. Всего на решение LP#491943 понадобилось около 9 месяцев.
Комментариев нет:
Отправить комментарий