1

У меня есть маршрутизатор WRT160NL linksys с 32 МБ ОЗУ и установленным OpwnWRT. У меня есть приложение, которое выполняет тяжелую запись для записи файлов на USB-флешку. (в основном 26 МБ в день, что почти столько же, сколько памяти роутера).

Я засвидетельствовал, что маршрутизатор перезагружается сам каждые 24 часа или около того. После мониторинга различных системных параметров в маршрутизаторе я заметил, что параметр Buffers в /proc /meminfo неуклонно снижался с 3 кБ до примерно 700 Б в течение дня, пока он не перезагрузился. Кроме того, параметр SUnreclaim постоянно увеличивается с 8 до 13 тысяч в течение этих 24 часов. Оба эти параметра возвращаются к 3k и 8k соответственно после перезагрузки.

Итак, я заметил, что маршрутизатор перезагружается, когда параметр Buffers достигает порогового значения 700B, а SUnreclaim достигает порогового значения 13k. В этот момент средняя нагрузка начинает постепенно увеличиваться, пока не достигнет точки, в которой она должна перезагрузить себя. Я предполагаю, что уменьшение параметра Buffers связано с увеличением параметра SUnreclaim.

Итак, я уже пытался очистить кэш, чтобы освободить память (синхронизация; echo 3> /proc /sys /vm /drop_cache), но это не приносит пользы, но задерживает проблему на очень небольшой период время. Я также пытался настроить некоторые переменные, связанные с памятью, в /proc /sys /vm /, но с небольшим или нулевым результатом (SUnreclaim продолжает расти независимо от того, что я делаю - и я все еще пробую некоторые альтернативные настройки).

Дело в том, что когда я запускаю роутер без приложения, все эти параметры остаются неизменными в течение дня, и роутер вообще не перезагружается!

Кроме того, когда я отключаю некоторые записи (которые сделаны через каналы и перенаправления в bash-скрипте), снижение меньше обычного (для перезагрузки требуется 4 дня вместо 1).

Таким образом, я предполагаю, что проблема связана с неисправимой памятью. Интерпретируя название "Unreclaimable", я предполагаю, что эта память хранится в ядре и никогда не будет снова доступна для уровня пользователя, а это означает, что у меня все меньше и меньше памяти доступно в течение нескольких часов в системе, для которой уже очень мало памяти. ...

Там очень мало информации о том, что такое память о невосстановимом слэбе и почему это происходит. Если бы вы могли объяснить это, я был бы признателен.

Может кто-нибудь помочь мне понять, в чем может быть проблема? Или как я могу остановить эти отклонения / увеличения, вызывающие перезагрузку маршрутизатора?

Извините за завет. Заранее спасибо.

1 ответ1

0

Похоже, что проблема была связана с утечкой памяти в драйвере Bluetooth ядра, из-за которой небольшой объем памяти становился невозможным каждый раз, когда был сделан запрос bluetooth (мы делали его каждые 4 секунды, так что ...), таким образом, получая почти половину память маршрутизатора недоступна для пользователя в течение 24 часов. После применения патча к ядру и его перекомпиляции проблема, похоже, исчезла.

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

Редактировать: эта проблема, по-видимому, присутствует в ядре Linux OpenWrt 2.6.32.25 Backfire (10.03, r24064).

Вот что решило проблему: http://www.spinics.net/lists/linux-bluetooth/msg13995.html

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