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

Linux не освобождает файловый буфер при выполнении оператора rm или> (перенаправление)

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

[8300002902-3] Отладка> бесплатно

              total         used         free       shared      buffers
Mem:       128104       123928         4176            0         2164
Swap:            0            0            0
Total:       128104       123928         4176    

Теперь моя проблема в том, что всякий раз, когда он выполняет некоторые команды и перенаправляет свой вывод в какой-либо файл с помощью оператора>, размер буфера увеличивается на 4 КБ, и даже если я удаляю тот же файл с помощью tm -rf, буфер снова увеличивается на 4 КБ. из-за этого, когда размер моего буфера достигает примерно 5,3 МБ, возникает проблема OOM, поскольку вы видите, что у меня доступно только 128 МБ свободного места. Я думаю, что ядро ​​не освобождает буферное пространство. Подскажите пожалуйста, что можно сделать, чтобы избавиться от этой проблемы. Я пробовал много вещей, которые есть в Интернете, например, установив значение drop_caches в / proc / sys / vm, эта команда недоступна в моей версии ядра. Пожалуйста, предложите заранее спасибо.

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

Например, эта ошибка происходит каждый раз, когда файл открывается и закрывается, когда включен режим O_DIRECT, и эта ошибка утечка памяти каждый раз, когда процесс разветвляется (что делает bash при перенаправлении stdout).

Эти утечки памяти были небольшими, поэтому их не так легко заметить в невстроенных системах, но когда у вас всего 128 МБ ОЗУ, считается каждый КБ.

И было еще много мелких разовых утечек памяти, подобных этой. Ядро Linux просто не было надежной рабочей лошадкой в ​​первые дни 2.4, как сегодня.

К сожалению, я не думаю, что вы сможете что-то сделать с этим, кроме обновления ядра, выпущенного где-то в этом тысячелетии. :П