Работает только init, telnet и sh, все еще утечка памяти. Как найти причину?

0

У нас проблема со встроенными 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.

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

SKi
источник
Как эти проблемы утечки памяти проявляются? Вы получаете сообщение об ошибке при запуске определенной программы? Что такое программа и точное сообщение об ошибке?
RedGrittyBrick
Мы пытаемся отслеживать использование памяти и повышать уровень тревоги, когда использование памяти увеличивается более чем на 40%. Несколько клиентов заметили тревогу. И сейчас мы расследуем причину тревоги. После 2 ответов кажется, что наш sw неправильно использует подсчет используемой памяти.
SKi
Все ваши рассуждения неверны. Вся цель памяти должна быть использована. Использование большей части вашей памяти совершенно нормально. Современные компьютеры используют как можно больше памяти для повышения производительности. Неиспользованная память полностью теряется. Это не значит, что если вы используете только половину памяти сейчас, вы можете использовать вдвое больше завтра. Любая память, которую вы не используете сегодня, навсегда потеряна.
David Schwartz
Да, я понимаю это. Единственная цель - обнаружить возможную утечку памяти до того, как утечка вызовет проблемы. Мы не собираемся сбрасывать кэши и т. Д. В производственную среду.
SKi

Ответы:

3

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

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

geekosaur
источник
Неактивная память является первой в очереди, которая будет освобождена. Если бы он уже был освобожден, он был бы свободным, а не неактивным. (В его случае я предполагаю, что большая часть неактивной памяти - это память, которую он вытеснил из кеша, удалив кеш страниц).
David Schwartz
2

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

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

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

David Schwartz
источник