У нас проблема со встроенными Linux-блоками. В некоторых коробках есть утечка памяти.

Ни один из процессов не удерживает утечку памяти.

После уничтожения всех возможных процессов, утечка все еще существует. При просмотре из /proc /meminfo кажется, что утечка памяти находится под неактивной памятью:

~ # echo 1 > /proc/sys/vm/drop_caches ; cat /proc/meminfo
MemTotal:       126744 kB
MemFree:        107684 kB
Buffers:             0 kB
Cached:           1160 kB
SwapCached:          0 kB
Active:           1204 kB
Inactive:        12532 kB
SwapTotal:           0 kB
SwapFree:            0 kB
...


~ # ps        
  PID USER       VSZ STAT COMMAND
    1 root      2748 S    init       
    2 root         0 SW<  [kthreadd]
    3 root         0 SW<  [ksoftirqd/0]
    4 root         0 SW<  [events/0]
    5 root         0 SW<  [khelper]
   31 root         0 SW<  [kblockd/0]
   42 root         0 SW<  [khubd]
   48 root         0 SW<  [kmmcd]
   82 root         0 SW   [pdflush]
   83 root         0 SW   [pdflush]
   84 root         0 SW<  [kswapd0]
   85 root         0 SW<  [aio/0]
  170 root         0 SW<  [rpciod/0]
  176 root         0 SW<  [mmcqd]
 1346 root      2756 S    telnetd -l /bin/login 
 1347 root      2856 S    -sh 
 3737 root      2856 R    ps 
~ #

Рам диски не используются. Версия для Linux 2.6.25.9.

Есть ли способ найти причину, по которой неактивная память постоянно увеличивается? Можно ли сбросить или сбросить неактивную память?

2 ответа2

3

Неактивная память не проблема, конечно, не "утечка"; это страницы памяти, которые обычно использовались для буферизации файлов или исполняемых файлов, которые в данный момент не запущены и хранятся для возможного повторного использования. Если что-то нуждается в данных (чтение того же файла или запуск той же программы), то они будут использованы повторно без повторного попадания на диск; однако если страницы нуждаются в чем-то еще, их неактивное состояние означает, что они будут использоваться при необходимости.

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

2

Нет никаких доказательств утечки каких-либо данных в размещенных вами данных. Память правильно отслеживается как неактивная. Если вы выполняете sync до drop_caches , вы, вероятно, не увидите столько неактивной памяти, но вы создаете ее, вытесняя страницы из кэша. Если они не могут быть освобождены (скажем, они грязные), они становятся неактивными.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .