IT-companies
July 2011 24

Тормоза iPhone 3G и consolidated.db

Около полугода назад я все-таки решился поставить iOS 4.2.1 на свой iPhone 3G (где долгое время была 3.1.3), и поначалу слухи о невиданных тормозах показались мне либо преувеличением, либо недоработками 4.0.
Однако через пару месяцев все начало тормозить уж слишком неприлично.
Погуглил, отключил Spotlight, не помогло.
Было очевидно, что основные проблемы связаны с Location services, стоило его включить, иногда не удавалось ответить на звонок даже через несколько минут после закрытия карты.
Приложения не запускались, хотя Springboard был живой.
По top или free не было понятно, в чем затык.
Гугл предлагает сделать Reset Location Warnings — помогло, но совсем ненадолго, уже на следующий день все вернулось в прежнее состояние. Приходилось держать Location Services выключенными, а когда навигация была очень нужна — готовиться долго ждать.
И тут я вспомнил историю с consolidated.db. Раз информация о всех перемещениях (как об этом писали в новостях) сохраняются в sqlite, наверняка база быстро становится большой и начинает тормозить.

Я нашел целых два consolidated.db:
iPhone:~ root# find / -iname consolidated* | xargs ls -l
-rw-r--r-- 1 root wheel 19036160 Oct 22 2010 /System/Library/Frameworks/CoreLocation.framework/Support/consolidated.db
-rw-r--r-- 1 root wheel 12611584 Jul 23 22:21 /private/var/root/Library/Caches/locationd/consolidated.db

Первый хоть и больше, но давно не обновлялся, а второй похож на то, что мы ищем.
Открываю его на компьютере в SQLite Database Browser — в таблицах WifiLocation и CellLocation в сумме около 100 тысяч записей, координаты похожи на мое местоположение. Борюсь с желанием склеить их в трек и наложить на карту — сейчас суть не в этом :)
Делаю
delete from wifilocation;
delete from celllocation;
update wifilocationcounts set count=0;
update celllocationcounts set count=0;

(для этого пришлось взять консольный sqlite3, который я позже поставил и на сам айфон. Truncate table он не умеет.)
Делаю на всякий случай vacuum. Файлик сократился до 4 Мб, все равно много, но уже должно быть заметно.
Заливаю файлик обратно, включаю locationd — вроде бы зашевилися. Завершается в 10-20 секунд вместо нескольких минут (это видно в top, а также по значку со стрелочкой в Status Bar, в правом верхнем углу рядом с батарейкой).
Пробую стереть его совсем — может, эта возня с sqlite не нужна на практике. И locationd его пересоздает (не сразу же при запуске, но через какое-то время), и опять все работает.

Таким образом, если в айфоне тормозит определение местоположения, и у вас есть jailbreak, можно попробовать вылечить его при помощи
iPhone:~ root# rm /private/var/root/Library/Caches/locationd/consolidated.db

Что же касается второго consolidated.db из /System/Library, там содержатся различные координаты базовых станций GSM и WiFi, в основном в западном полушарии. Также, у всех записей timestamp=0. Возможно, эта база должна ускорить работу навигации на демонстрациях в Купертино :)

PS Если ставите sshd — не забывайте сразу, сразу же поменять пароли рута и mobile и закинуть свой публичный ключ

PPS Можно установить права 000 на него и забыть до следующей перепрошивки.
chmod 0 /private/var/root/Library/Caches/locationd/consolidated.db

Не проверял, но говорят, что этого мало, и лучше всего подменить его папкой
rm /private/var/root/Library/Caches/locationd/consolidated.db
mkdir /private/var/root/Library/Caches/locationd/consolidated.db
+53
4.1k 53
Comments 32
Top of the day