Программное обеспечение Cisco IOS и NX-OS : Cisco IOS 15.1M&T

ОШИБКИ MALLOCFAIL и общее устранение неполадок ошибок памяти

20 октября 2016 - Машинный перевод
Другие версии: PDF-версия:pdf | Английский (22 августа 2015) | Отзыв

Введение

Этот документ обсуждает ошибки MALLOCFAIL на собственном Cisco IOS®, а также шагает для взятия и информация для сбора, прежде чем вы откроете Центр технической поддержки Cisco (TAC) случай или повторно загрузите устройство для ускорения устранения проблемы. Этот документ не является исчерпывающим, но предоставляет общее указание, используемое для устранения проблем проблем памяти со многими маршрутизаторами и коммутаторами.

Внесенный Брэндоном Линчем, специалистом службы технической поддержки Cisco.

ОШИБКИ MALLOCFAIL

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

Проблемы памяти обычно появляются в форме ошибок MALLOCFAIL в журналах вашего маршрутизатора или коммутатора. Эти ошибки важны, потому что они предоставляют "дорожные знаки" направить расследование. Вот типовая ошибка MALLOCFAIL:

%SYS-2-MALLOCFAIL: Memory allocation of 65536 bytes failed
from 0x60103098,
alignment 0
Pool: Processor Free: 5453728 Cause: Memory fragmentation
Alternate Pool: None Free: 0 Cause: No Alternate pool

Первая вещь заметить состоит в том, сколько памяти необходимо выделить и сколько доступной памяти вы имеете. Данный пример показывает сценарий, откуда необходимо выделить 65 КБ пула, который имеет свободных только приблизительно 5.45 МБ. Выходные данные указывают, что, даже при том, что существует достаточный объем свободной памяти, самый большой последовательный блок меньше, чем 65 КБ, и подведенное распределение памяти. В то время как по определению это считают фрагментацией памяти, это обычно не причина. Чаще всего это просто вызвано нижней областью памяти в самом пуле.

Второй вещью заметить является тип пула. prevoius пример имел дело с Пулом процессора. Это важно, потому что это - первый дорожный знак, который направляет расследование и что потребности быть проверенным. Заданным пулом должен быть или Процессор или ввод-вывод. Вот пример ошибки Памяти ввода/вывода:

%SYS-2-MALLOCFAIL: Memory allocation of 65548 bytes failed from 0x400B8564, 
alignment 32
Pool: I/O Free: 39696 Cause: Not enough free memory
Alternate Pool: None Free: 0 Cause: No Alternate pool

Следующие разделы детализируют эти пулы далее. Как только пул определен, можно фокусировать усилия соответственно в правильных пятнах.

Пул процессора

Пул процессора используется, поскольку название подразумевает для различных процессов, которые работают на маршрутизаторе или коммутаторе. Существуют определенные процессы, которые лежат в основе большинства версий Cisco IOS и платформ та память использования. Например, Init является процессом, установленным на начальной загрузке большинства устройств, и присутствует через различные платформы. Другие процессы, которые могли бы присутствовать, основываются на конфигурации отдельного устройства. Например, на платформах, в которых голос настраивается и используется, специфичные для голоса процессы используют память, в то время как в более обобщенных конфигурациях без голоса, эти процессы не держатся так же, или никакая память вообще.

Определенные процессы держат большую память, чем другие. Если существуют вопросы или опасения по поводу определенного процесса, лучше открывать кэйс ТАС (Центра технической поддержки) для исследования его.

Причины и что собрать

  1. Если устройство недавно подверглось обновлению Cisco IOS, первой вещью проверить является минимальный требуемый DRAM для нового образа. Это должно быть равно или меньше, чем сумма DRAM, установленного на самом устройстве. Минимальный требуемый DRAM перечислен под образом в Программном средстве Загрузки программного обеспечения. Введите команду Show version для подтверждения суммы установленного DRAM:
    Cisco 2821 (revision 53.51) with 210944K/51200K bytes of memory.

    Для определения общей емкости DRAM добавьте эти номера. Этот определенный маршрутизатор Cisco имеет 256 МБ DRAM.

  2. Другая возможная причина является утечкой памяти, вызванной дефектом Cisco IOS. В этой ситуации один процесс использует дополнительную оплату памяти, пока это не заканчивается. Введите эти команды, когда память будет низко в порядке для сбора информации:
    show clock
    show mem stat
    show proc mem sorted
    show mem all totals
    show log

    Mem show proc сортировал списки команд, все процессы в порядке убывания от самого высокого количества памяти придерживались самого низкого. Определите самый высокий процесс, но исключите Init. Как только расследование завершено, найдите ID Процесса (PID) для того процесса на левой стороне выходных данных и соберите эту информацию:
    show proc mem <PID #>

    Если самый высокий процесс Мертв, соберите эту информацию в дополнение к предыдущим выходным данным:
    show mem dead totals
    show mem dead

    Определенные процессы требуют большего количества всестороннего расследования, но они не покрыты этим документом.

  3. Когда у вас заканчивается память из-за процессов и конфигурации на устройстве, с другой потенциальной причиной проблем памяти встречаются. Одним примером этого является Маршрутизатор пограничного протокола шлюза (BGP). В некоторых случаях BGP держит большое количество памяти из-за количества маршрутов, которые это принимает. Это не вызвано дефектом Cisco IOS. Эта проблема должна быть исправлена путем изменения конфигурации, чтобы достигнуть оптимальной маршрутизации и уменьшить использование памяти.

    Если вы не уверены, собираете, выходные данные, перечисленные ранее (исключите, показывают mem мертвые общие количества и показывают мертвому mem), и откройте кэйс ТАС (Центра технической поддержки), потому что эта проблема, вероятно, потребует дополнительного исследования.

Пул ввода-вывода

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

Причины и что собрать

  1. Первой вещью свериться с проблемами Памяти ввода/вывода является потенциальная утечка содержимого буфера, вызванная дефектом Cisco IOS. Это часто проявляет себя как определенный пул, который увеличивает его сумму буферов, не освобождая их назад в пул ввода-вывода, как только они больше не необходимы. Вот пример этого:
     --------- show buffers --------

    Buffer elements:
        500 in free list (500 max allowed)
        3220350364 hits, 0 misses, 0 created

    Public buffer pools:
    Small buffers, 104 bytes (total 6144, permanent 6144):
        3867 in free list (2048 min, 8192 max allowed)
        248913132 hits, 0 misses, 0 trims, 0 created
        0 failures (0 no memory)
    Medium buffers, 256 bytes (total 86401, permanent 3000, peak 86401 @ 05:18:11):
        0 in free list (64 min, 3000 max allowed)
        9697361 hits, 203293 misses, 2208 trims, 85609 created
        167633 failures (651288 no memory)
    Middle buffers, 600 bytes (total 512, permanent 512):
        0 in free list (64 min, 1024 max allowed)
        9284431 hits, 237750 misses, 0 trims, 0 created
        224619 failures (680486 no memory)
    Big buffers, 1536 bytes (total 1000, permanent 1000):
        0 in free list (64 min, 1000 max allowed)
        69471745 hits, 895218 misses, 0 trims, 0 created
        842142 failures (1821074 no memory)
    VeryBig buffers, 4520 bytes (total 10, permanent 10, peak 122 @ 1w3d):
        0 in free list (0 min, 100 max allowed)
        2120517 hits, 1632477 misses, 112 trims, 112 created
        1632421 failures (3272987 no memory)
    Large buffers, 9240 bytes (total 8, permanent 8, peak 18 @ 1w3d):
        0 in free list (0 min, 10 max allowed)
        9593 hits, 832217 misses, 44 trims, 44 created
        832195 failures (1651309 no memory)
    Huge buffers, 18024 bytes (total 2, permanent 2):
        0 in free list (0 min, 4 max allowed)
        1325 hits, 831497 misses, 0 trims, 0 created
        831494 failures (1649904 no memory)

    Предыдущие выходные данные ясно показывают, что проблема со Средним пулом. Его итоговое значение намного выше, чем постоянный набор суммы для того пула. Выходные данные показывают, что, даже с более чем 86,000 буферов в пуле, вы имеете в наличии 0 в списке свободной памяти. Наконец, выходные данные показывают, что количество обрезок намного ниже, чем созданный номер, который указывает, что они не были освобождены назад в пул ввода-вывода для дальнейшего потребления. Для дальнейшего пояснения этих полей см. Определения для Полевой ссылки Буферного пула в Разделе связанных сведений в конце этого документа.

    Для этого сценария сначала перехватите эти выходные данные:
    show clock
    show mem stat
    show buffers
    show log

    Как только проблематичный пул или пулы определены, вводят эту команду для фокусирований на неисправном пуле (пулах):
    show buffer pool <pool name> packet

    Эта команда могла бы предоставить обширные выходные данные. Можно обычно определять, какие пакеты находятся в этих буферах и кто выделил их в нескольких страницах выходных данных.

  2. Другая возможная причина является событием сети/трафика. Это часто проявляет себя как чрезмерное использование во множественных пулах. Рекомендуется, чтобы предыдущие выходные данные были собраны, наряду с show buffer pool <имя пула> выходные данные команды packet для пулов, которые показывают это использование, и что вы открываете кэйс ТАС (Центра технической поддержки). Это часто вызывается аварийным или неожиданным трафиком, который должен быть процессной коммутацией устройством. Поскольку поток мог бы быть пульсирующим и быстрым, у можно закончиться Память ввода/вывода в относительно коротком периоде времени. Для устранения проблем этого типа ошибки обычно необходимо определить источник трафика, чтобы видеть, является ли этот поток аварийным и, если так, устраните или заблокируйте его.

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

Элементы для исследования

На большинстве маршрутизаторов примеры ошибки MALLOCFAIL, представленные ранее, являются стандартными. На коммутаторах Cisco Catalyst серии 6500 и маршрутизаторах серии "7600" с Supervisor Engine (SUP) или Процессор переключателей маршрута (RSP), эти ошибки могли бы варьироваться. Например, эта ошибка была взята от Процессора маршрута (RP), входит в систему коммутатора серии "6500":

%SYS-SP-2-MALLOCFAIL: Memory allocation of 820 bytes failed from 0x40C83B60,
alignment 32
Pool: I/O Free: 48 Cause: Not enough free memory
Alternate Pool: None Free: 0 Cause: No Alternate pool

Ошибка MALLOCFAIL показывает, что Процессор коммутации (SP) SUP сообщает о проблеме, не RP. Если проблема привязана к RP, обозначение SP по ошибке не присутствует. Поэтому предыдущие выходные данные должны быть взяты от SP. Для выполнения этого предшествуйте командам с:

remote command switch

Сообщение об ошибках могло бы также отнестись к резерву, SUP/RSP RP или SP, как обозначено STDBY, и должен быть собран соответственно.

Сводка

Вы могли бы ускорить разрешение проблемы и принести устойчивость к вашему устройству более быстро при сборе выходных данных, перечисленных в этом документе. Если какие-либо вопросы возникают или если существует неопределенность о производительности памяти на устройстве, лучше открывать кэйс ТАС (Центра технической поддержки) для исследования его.

Дополнительные сведения



Document ID: 116467