Linux не освобождает файловый буфер, когда мы выполняем оператор rm или › (перенаправление)

У меня есть маршрутизатор с embedded-linux, версия ядра 2.4.22. Я знаю его очень старую версию, но я должен иметь дело с этим. Ниже приведен вывод команды free на поле,

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

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

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

Вот дамп proc/meminfo, может поможет.

[8300002902-3] Отладка > cat /proc/meminfo

         total:    used:    free:  shared: buffers:  cached:
Mem:  131178496 126545920  4632576        0  2211840 54927360
Swap:        0        0        0
MemTotal:       128104 kB
MemFree:          4524 kB
MemShared:           0 kB
Buffers:          2160 kB
Cached:          53640 kB
SwapCached:          0 kB
Active:          66628 kB
Inactive:        36692 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       128104 kB
LowFree:          4524 kB
SwapTotal:           0 kB
SwapFree:            0 kB

person Ankit Billaiya    schedule 14.05.2013    source источник
comment
Это Linux или uClinux? У последнего могут возникнуть трудности с освобождением памяти, поскольку он создан для работы в системах без MMU, чтобы гибко переназначать доступное пространство и предоставлять процессам собственное частное адресное пространство.   -  person Chris Stratton    schedule 14.05.2013
comment
Можете ли вы также сбросить вывод /proc/meminfo   -  person Ahmed Masud    schedule 15.05.2013
comment
@AhmedMasud Пожалуйста, посмотрите дамп proc/meminfo, который вы запрашивали, и я использую только Linux   -  person Ankit Billaiya    schedule 15.05.2013
comment
что происходит с буферами после запуска sync?   -  person Ahmed Masud    schedule 15.05.2013
comment
Ничего не происходит, когда я выполняю команду синхронизации... размер буфера остается прежним... @AhmedMasud   -  person Ankit Billaiya    schedule 15.05.2013
comment
stackoverflow.com/questions/16518433/   -  person wilsonwen    schedule 16.05.2013
comment
Файл все еще открыт в каком-то процессе? Если это так, rm только предотвратит его повторное открытие, он не закроет дескрипторы открытых файлов или их возможность доступа к данным файла, поэтому, по-видимому, также не освободит буферы.   -  person Chris Stratton    schedule 17.05.2013
comment
Чтобы следить за @ChrisStratton, вы можете сделать lsof, чтобы узнать, что еще может происходить?   -  person jhfrontz    schedule 18.06.2013
comment
Не могли бы вы привести конкретный пример команды, которую вы запускаете и перенаправляете стандартный вывод с помощью оператора ›? Другой процесс, хранящий файловый дескриптор файла, является наиболее правдоподобным объяснением.   -  person jdb    schedule 09.09.2013