- system_server жрет cpu
- Русские Блоги
- Чтение исходного кода Android — процесс system_server
- system_server процесс
- Каталог статей
- 1. Параметры инициализации
- 2. ForkSystemServer создает процесс
- 3. handleSystemServerProcess
- 4. Основной метод systemServer
- 4.1 startBootstrapServices
- 4.2 startCoreServices
- 4.3 startOtherServices
- System_Server (Android OS) High CPU and Lag
- Breadcrumb
- guruleenyc
- Делаем сервер из Android-телефона
- Часть первая. Прошивка
- Часть вторая. Настройка PostmarketOS
- Настройка сети
system_server жрет cpu
это нормально?
flyme os 4.5.3.2A
дроид 5.1
ядро 3.10 вроде
ах да, load average
шото как-то мне не нравится это
сделал сброс, вроде лучше стало
на mtk энергосбережение все равно какое-то странное
На днях поменял стандартный GApss на OpenGApps pico, предварительно отформатировав system, а думал уже, что ничего сделать нельзя. Обычный hard reset не помогал — часто всё «подвисало» и надолго, тот же system_server и mmcqd/0, гугл находил похожие проблемы с причинами в ext4 fs, но e2fsck не помогал, Nexus 7 (2012), tegra3, CM 12.1 nightbuild.
Странно, что на Nexus 4 похожего не наблюдалось, хотя всё то же самое установлено.
meizu m2 mini , GApss нет
вообще ничего нет
он пустой
mmcqd/0 тоже нет
только system_server скачет
проверил на другом теле другого производителя с другим cpu и 4.4 дроидом — там все ок(
Интересно, может ли что-то оставаться конфликтующее с новой прошивкой при обновлении, ведь system не форматируется, во всяком случае так в CyanogenMod.
постоянно system_server висит?
нас сколько % грузит?
Дело в прошивке или софте.
И да, такого быть не должно.
Когда проблема была (до форматирования system) system_server висел одновременно с mmcqd/0, причём этот mmcqd шёл первым по списку. Случалось это ориентировочно после нескольких минут работы планшета и переключении м/у «тяжёлыми» процессами (ff, youtube, osmand и т.п.), пропадало после app kill-ов. В процентах не смотрел, но load average достигал 10-11-ти (в циане можно выводить с ps-list в правом верхнем углу).
Т.е. проблема была не в каком-то канкретном apk, а где-то уровнем ниже. Я вообще думал, что стали прошивку хуже оптимизировать, но, как оказалось, это предположение было ошибочным.
Дак вот после формата system это вообще другой девайс по ощущениям.
Источник
Русские Блоги
Чтение исходного кода Android — процесс system_server
system_server процесс
Каталог статей
Затем посмотрите на конкретную реализацию метода startSystemServer:
В основном это делается таким способом:
- Инициализировать параметры, необходимые для запуска systemServer
- разделить отдельный процесс
- handleSystemServerProcess запускает созданный процесс
1. Параметры инициализации
Массив атрибутов arg будет использоваться в качестве параметра запуска процесса syster_server. С помощью параметров вы можете узнать, что идентификатор пользователя и идентификатор группы пользователей процесса syster_server равны 1000 и имеют разрешения некоторых групп, таких как группы пользователей 1001, 1002. Имя процесса — system_server, который запущен. имя класса Java com.android.server.SystemServer , А затем инкапсулируйте эти строки в объект ZygoteConnection.Arguments.
2. ForkSystemServer создает процесс
Из этого метода видно, что процесс создается в основном с помощью метода nativeForkSystemServer собственного уровня, который фактически использует frameworks/base/core/jni/com_android_internal_os_Zygote.cpp Под каталогом ForkAndSpecializeCommon метод:
Итак, этот метод в основном:
- Серия инициализации
- вилка дочернего процесса
- Дочерний процесс продолжает выполнять метод callPostForkChildHooks для выполнения некоторых операций.
3. handleSystemServerProcess
По названию можно понять, что этот метод используется для завершения работы, оставленной процессом system_server.
Сначала закройте сокет из разветвления процесса app_process, потому что system_server не требует, чтобы другие процессы запрашивали его через сокеты, а связыватель, используемый system_server, реализует межпроцессные запросы
Затем создайте ClassLoader
Наконец, выполните zygoteInit
Этот метод в основном обеспечивает службу связывания для всего процесса sysete_mserver. По сути, открывается цикл, и операция чтения продолжается в пространстве, отображенном драйвером подшивки, и считанная информация обрабатывается, а затем результат обработки записывается обратно в драйвер подшивки. Если нет информации для чтения, поток блокируется. Детали опущены.
Затем посмотрите на реализацию метода run класса MethodAndArgsCaller:
Начиная с startSystemServer, после ряда операций я наконец добрался до основного метода класса systemServer.Причина этого не в том, чтобы выполнить основной метод systemServer с самого начала:
- Создайте отдельный процесс. Выполнение startSystemServer находится в процессе зиготы, а окончательное выполнение основного метода класса systemServer уже находится в процессе system_server
- Инициализировать собственную информацию процесса system_server, такую как установка информации о собственном стеке процесса system_server, проверка связанных разрешений, изменение имени процесса и т. Д.
- Удалите унаследованное от zygote, но сам процесс system_server не нужен. Например, закрытие сокета, унаследованного от zygote, и очистка ранее установленного кадра стека путем выдачи исключения
- Включите уникальные операции процесса system_server, такие как nativeZygoteInit, чтобы включить пул потоков связывания для самого system_server, что удобно для предоставления услуг другим процессам.
4. Основной метод systemServer
- Большая часть предыдущего раздела посвящена подготовке к system_server, такой как использование кучи, приоритет потока, создание цикла сообщений и т. Д.
- Открытый сервис, условно разделенный на три категории: startBootstrapServices (), startCoreServices (), startOtherServices ()
- Looper.loop () входит в бесконечный цикл до выключения
4.1 startBootstrapServices
- Благодаря созданному объекту SystemServiceManager, единое управление каждой службой
- Первый запуск — это установщик, который создает ключевую директорию /data/user , Каталог может обеспечить плавный запуск других служб
- Затем будет запущен AMS.Из кода видно, что AMS тесно связана с несколькими другими сервисами, такими как PMS и Installer.
- setSystemProcess добавляет сервисы, связанные с процессами
4.2 startCoreServices
Приоритет основной службы ниже, чем у службы начальной загрузки, и ниже нее не так много служб, в основном это службы управления питанием батареи, службы управления использованием приложений и т. Д.
4.3 startOtherServices
По сравнению с двумя другими сервисами, этот другой сервис имеет самый низкий приоритет и включает в себя большинство сервисов, слишком ленив, чтобы немного писать.
Источник
System_Server (Android OS) High CPU and Lag
Breadcrumb
guruleenyc
Senior Member
Model: Galaxy Note 4
Android: 6.01
Rooted: No
My phone once again is almost impossible to use due to constant lag and slowness. After using one of many apps to identify what was consuming all my CPU I discovered it was the Android OS process and then I drilled down using top command (Elixir 2 app) to identify sub-process system_server. The system_server process was constantly utilizing >40% CPU and when this is coupled with user processes, my CPU was pegged in the 95-100% all the time. This made my phone just about impossible to use.
I encountered this issue approx. 3mo ago and I tried everything to resolve, but ended up doing a factory reset to resolve it. after the same thing a few months ago. Doing a factory reset was the only resolution unfortunately at the time. Now that it the issue has returned, I have tried just about everything to fix it without doing a factory reset, here are some of the trouble-shooting:
- Toggled bluetooth on/off
- Disabled improve location accuracy options for both BT and WiFi
- Removed and re-added my 2 Google accounts
- Disabled Google account sync of Gmail, and selective options.
- Toggled from Global/GSM to LTE mobile network mode
What did clear the system_server CPU usage issue was putting my phone in Airplane Mode. All this tells me it is radio related.
My phone has been extremely slow and hanging as a result the past three days to a point where it was FRUSTRATING the hell out me, at one point I almost threw it. After searching high and low on the web, I couldn’t deal with it any long—-so I too the plunge and performed another factory reset—which fixed the problem. Since this was the second time in 4 months, I’d like help identifying what is causing this to avoid it in the future.
Источник
Делаем сервер из Android-телефона
Некоторое время назад мне пришла в голову интересная идея — превратить свои старые телефоны (их скопилось немало за десять лет) в серверы, в качестве альтернативы покупке Raspberry Pi.
На то было несколько причин: во-первых, у телефонов есть батарея, что для сервера практически бесплатный мини-UPS, во-вторых, внутренняя память смартфона (UFS) работает быстрее и надёжнее, чем SD-карта. В-третьих, у телефонов имеется экран, по которому можно отслеживать состояние сервера.
Ну и в-четвёртых, мне просто было жаль их выбрасывать. Консьюмеризм в наше время предписывает каждый год-два покупать новые смартфоны, производители блокируют возможности железа, которые им невыгодны, прекращают поддержку старых моделей, оставляя людей беспомощными. Миллионы смартфонов отправляются на свалку истории каждый год, хотя каждый из них это мощный компьютер.
TL;DR: в этом посте будут разобраны вопросы установки PostmarketOS на смартфон,
поднятия на нём в качестве примера Docker и веб-приложения в нём.
Сразу хочу оговориться — я понимаю, что есть типовые решения, например Termux или UserLAnd, и спектр поддерживаемых устройств у них шире. Но все они работают как надстройки над основной системой, Android, и подвержены её ограничениям, таким как агрессивное сокращение энергопотребления или перенос задач на LITTLE-ядра при выключении экрана. Будущее Termux, например, вообще неясно из-за всё более жёстких гаек безопасности в Android 11. UserLAnd, помимо этого, работает через PRoot, который при всей своей пользе ощутимо замедляет процессы с большим количеством системных вызовов. В этой статье мы разбираем именно создание сервера на железе без Android.
Часть первая. Прошивка
Проект PostmarketOS был создан именно ради этой цели — сохранение вычислительных устройств после прекращения их поддержки производителями. Список поддерживаемых устройств можно найти здесь.
Для установки требуется телефон с разблокированным загрузчиком. В качестве примера буду использовать OnePlus One из-за простоты разлочки со стороны производителя. Для каждого производителя список шагов разный, ниже привожу обобщённые действия для смартфона 2018-2021 года выпуска:
Далее авторизуем подключение на самом телефоне
После разблокировки телефон сбросит данные снова перезагрузится в Android, перезапустите его в режим fastboot комбинацией клавиш или повторите релевантные для этого шаги 3 и 4.
Если разблокировка прошла успешно, далее можно следовать стандартной процедуре установки PmOS:
На этом этапе pmbootstrap запросит пароль и задаст довольно много вопросов о том, как сконфигурировать систему и целевое устройство. Итоговый результат будет записан в
Пару слов по поводу разных конфигураций. Здесь есть несколько важных пунктов — ядро mainline или downstream , графическая среда mate , weston и т.д., канал обновлений edge или stable . Интуиция при выборе значений должна быть такой:
- Если планируете пользоваться графикой, ставьте пароль из цифр. Некоторые графические среды поддерживают только цифровую клавиатуру на экране ввода пин-кода.
- Выбирайте edge в качестве канала обновлений. PostmarketOS разрабатывается быстро, и много опакеченного ПО ещё долго не будет в stable .
- Выбирайте ядро downstream если хотите максимум работающей «из коробки» второстепенной периферии после установки. Выбирайте ядро mainline если вам нужен OpenGL/OpenCL и современные возможности ядра, такие как контейнеризация и cgroups.
- Выбирайте графическую систему phosh , sway или plasma-mobile если у ваc ядро mainline и имеется графическое ускорение. В противном случае остановитесь на mate или xfce4 . Внимательно смотрите страницу вики для вашего устройства.
Затем с помощью pmbootstrap install сразу же начинаем сборку образа целевой системы. После сборки её предлагается установить самому, так как механизм установки варьируется от модели к модели. Пример того, как это делается стандартно, и как вышло у меня, ниже.
Есть хорошие шансы, что всё сработает как надо с первого раза. К сожалению, загрузчики и реализацию fastboot каждый производитель телефонов пишет по-своему, отчего попытки установки превращаются в смерть от тысячи иголок. В моём случае fastboot наотрез отказывался прошивать образы такого размера. Пришлось воспользоваться сторонним recovery, чтобы продвинуться дальше:
После завершения процесса sideload жмём «Reboot to system». Должен пойти процесс загрузки ядра и далее самой PostmarketOS.
Часть вторая. Настройка PostmarketOS
По сути своей, PostmarketOS построена на основе дистрибутива Linux под названием Alpine. Это позволяет создать работающую систему минимального размера, что для большого количества старых устройств с ограниченной внутренней памятью критично.
Однако, есть и подводные камни. О них ниже:
- Alpine построен на основе лаконичного libc под названием Musl. Плохая новость тут в том, что большинство других дистрибутивов работает на основе glibc, что означает невозможность установки ПО простым переносом бинарников с Raspbian или Ubuntu ARM, как позволяет, например, Golang или Rust.
- Система инициализации в дистрибутиве — OpenRC. Если вы знакомы с Gentoo, это для вас не будет озарением, но OpenRC куда ближе к прародителю sysvinit, чем к общепринятому в индустрии systemd. Имейте в виду.
- Для уменьшения размера используется Busybox, поэтому команды grep / sed / find и т.д. имеют ограниченный набор опций по умолчанию. Устанавливайте их GNU-версии и стандартный Bash-шелл отдельно, чтобы получить полный набор.
Итак, после загрузки телефона с PostmarketOS нам необходимо каким-то образом с ним взаимодействовать. Если вы ставили оболочку Phosh или Plasma Mobile, скорее всего вы сможете это сделать напрямую с тачскрина телефона. Если по каким-то причинам графический интерфейс не сработал, подключайте телефон к компьютеру USB-кабелем, PostmarketOS автоматически создаст дополнительную сеть:
После чего к телефону можно будет подключиться с именем и паролем пользователя, который вы указывали при pmbootstrap install :
Если вы видите эти строчки — значит PostmarketOS установлена верно. В противном случае попробуйте посмотреть секцию Troubleshooting для вашего устройства на вики PmOS, измените конфигурацию для pmbootstrap install или спросите мейнтейнеров в IRC или Matrix чате (все три пункта ваш покорный слуга в итоге и сделал).
Настройка сети
Если не получилось настроить WiFi сеть через графическую оболочку, ниже пример как сделать это через консоль. Предварительно подключите телефон к USB-интерфейсу вашего ПК.
Источник