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    

Сега проблемът ми е, че всеки път, когато изпълни някои команди и пренасочи изхода си към някакъв файл с помощта на оператора >, размерът на буфера се увеличава с 4KB и дори да премахна същия файл с помощта на rm -rf, буферът отново се увеличава с 4KB. поради това, когато размерът на буфера ми достигне близо 5,3 MB размер, възниква проблемът с OOM, тъй като можете да видите, че имам на разположение само 128 MB RAM. Мисля, че ядрото не възстановява буферното пространство. Моля, кажете ми какво мога да направя, за да се отърва от този проблем. Проучих стойността на настройката drop_caches в /proc/sys/vm, но тази команда не е налична в моята версия на ядрото.

Ето dump-а на 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