MIUI, базирующаяся на Android 2.3.7 меня утомила необходимостью постоянно следить за качеством софта на тему жручести батареи. Проведёшь жёсткую оптимизацию, вытянешь до 30..32 часов работы, проходит пара недель — снова живёт лишь часов 20. И это в хороших условиях. Как начнёшь по городу и метро мотаться, сменяя БС за БС, так и с утра до вечера может не хватить.
Помню по прошлогодним экспериментам, что под 4.x было всё на этот счёт вполне прилично. Но хватало своих глюков. Особенно убивали тормоза, которые неизбежно приходили через какое-то время после начала использования.
Решил посмотреть, что за прошедшие месяцы изменилось. Порылся по форумам, посмотрел, что хвалял. Скачал сперва расхваленный Nik Project и… нарвался сходу на баг новой только что вышедшей его версии. Тогда перепрошился на CM 10.1 RC1…
Что сказать, работает, вроде бы, всё нормально. С камерой есть лёгкие глючки (в процессе фокусировки экран мигает зелёным, но на снимках это не сказывается). FM-радио отсутствует (говорят, что лечится, не разбирался). В остальном — всё ок. Со всеми плюсами и минусами Android 4. Но, главное — «из коробки» и после восстановления всего софта сутки держит уверенно. Ну а если экономно — то и двое суток. Но мне экономно не нужно
Но — пол бочки дёгтя. Через некоторое время работы снова начинает методично тормозить. Сперва немного, потом всё жестче. До полных подвисов. На форумах народ на это наступал. Ничего лучше, кроме как перезагружатся — не придумал. Терпел я это безобразие несколько дней, а со вчерашнего (т.е. уже позавчерашнего) дня сел разбираться. WTF?
Сразу резюме (детективную историю поиска по тупиковым путям опускаю) — не хватает памяти! При активной работе на обжитой машинке очень быстро память оказывается забитой Гуглоплюсами, Фейсбуками и прочими Гуглокартами.
При этом наблюдается две симптоматики:
1. Пока свободной памяти до 200Мб — всё летает вообще фантастически. Когда становится меньше 100Мб — начинает притормаживать. Если свободной памяти меньше 70Мб — тормоза очень сильные. Мегабайт 20-30 — всё, система встаёт колом. Она очень опрометчиво избавляется от кешей и буферов и опаньки. Флеш без кеша в наше время всё ещё крайне тормозной. Будь система поумнее, она бы убивала фоновые приложения, не трогая буфера и кеш. Но — увы. Поубиваешь процессы, освободишь память — всё на короткое время снова шустрит. Но — на короткое. Потому что через считанные минуты убиенный софт снова запущен. Уж как только я с этим не боролся. Мелкий эффект есть, но в целом — ужасно.
2. Как только кончается память, Android начинает убивать приложения. Но по каждому чиху снова их запускает. Убивая другие. И тут же снова запускает их, убивая запущенные перед этим. Снова страшные тормоза. Жор батареи. Особенно это заметно при поездках по городу. Постоянные смены БС провоцируют массу внутренних процессов постоянно дёргая весь софт…
Тут я опускаю серию экспериментов с отрыванием сервисов, интентов, раздачи приоритетов процессам — нехватка памяти не компенсируется ни чем.
И вот тут, наконец, я дозрел до «взрослого» решения
Своп!
Нет, я не стал извращаться жёстко, переразбивая карточку, создавая новый раздел… Я просто слепил своп-файл на карточке, смонтировал его… И эффект не передаваемый
Нет, совсем идеально всё не стало, Андроид держит свободную память в районе 80-90Мб, что для идеальной плавности маловато, но в целом система реально перестала тормозить! Выделил 256Мб под своп, сейчас занято уже 235Мб. Надо будет выделить больше. Вы представляете, во что выливается нехватка 235Мб при свободной памяти в 80-90Мб? То-то же! Но самый шикарный эффект даже не от прекращения жёстких тормозов, а от того, что софт перестаёт убиваться от нехватки памяти. Теперь тяжёлые приложения стартуют не совсем мгновенно, конечно, т.к. грузятся, всё же, из свопа, но очень быстро. Половина секунды вместо многих секунд полной начальной инициализации. И они — «живые», в том состоянии, в котором оставались. Ибо далеко не весь софт восстанавливает целиком состояние, как положено. И на это нужно, опять же, время. А тут — через пол-часа активной работы в десятке приложений возвращаешься в читалку — а она сразу готова к работе, не переоткрывает заново книжку. Потому что не убивалась
А теперь — непосредственно рецепты для заинтересованных
— Необходим root.
— Дальше два варианта. Первый — совсем простой. Качаем бесплатный
Swapper for Root - Приложения на Google Play , запускаем, отмечаем «Active Swap on Boot» выбираем размер свопа и... готово.
— Второй вариант — для Ъ-линуксоидов
— Нужно подключиться к командной строке Андроида. Можно это сделать (вероятно) через adb shell, но я по старой привычке цепляюсь через
QuickSSHd - Приложения на Google Play
— Выполняем следующие команды:
code bash
# Создаём своп-файл
busybox dd if=/dev/zero of=/mnt/sdcard/swap.swp bs=1K count=256K
# Инициализируем его
mkswap /mnt/sdcard/swap.swp
# Включаем
swapon /mnt/sdcard/swap.swp
# Говорим Андроиду довольно жёстко сбрасывать в своп данные
# Можно попробовать не 90, а, скажем, 50 :)
echo 90 > /proc/sys/vm/swappiness
Всё, вручную всё сделали, всё должно работать. Использование свопа можно оценить по команде
free:
(продолжение завтра, как проснусь
)