2024. március 28., csütörtök

Gyorskeresés

Android ActivityManager és memóriahasználat javítása* - kifejezetten haladóknak

Írta: | Kulcsszavak: Android . ActivityManager . am . memóriahasználat . javítás . empty . cache . folyamat . process

[ ÚJ BEJEGYZÉS ]

SAJÁT FELELŐSSÉGRE

*Javítás alatt azt értem hogy az AOSP forrásban nevetségesen alacsonyan ("Froyo szinten") tartott empty process / cached process ürítési időt / darabszámot növeljük meg hogy a rendszer ne zárogassa be a folyamatainkat csak azért mert épp nem csinálunk velük semmit vagy mert épp nincs megjelenítve, esetleg nincs rajta valami amit aktívan lehetne nyomokodni pl. natív gombok, csúszkák, lejátszott videó, zene, etc.. (mert pl. csak egy betöltött weblap amin épp hozzászólást írsz.. ami elvész egy sima taszkváltással).

Igen, ez azzal fog járni hogy a mutatott free RAM kevesebb lesz, igen, azért mert végre valahára használni fogja a rendszer, igen, ha én nem akarok bezárni valamit akkor NE záródjon be, ha memóriában akarom hogy legyen akkor tartsa ott a rendszer nekem. A RAM-ot kifizettem, NEM akarom üresen tartani, ha van memory pressure (vagyis pl. egy új folyamat / alkalmazás indításához KELL a memória akkor fel fogja szabadítani a rendszer, nem kell emiatt aggódni, az empty folyamatokból fel lesz szabadítva a hely).

Android 10 és felette. Alatta is vannak lehetőségek de nem kívánok már foglalkozni vele.

A periodic nevű service lehet csak MIUI specifikus - ha azt nem lehet kikapcsolni az nem baj. A periodic helyett lehet az adott gyártói ROM mást vagy saját service-t használ (lásd: dontkillmyapp.com)
MIUI-ra ettől még ugyanúgy kell(het) a MIUI kanossza (autostart, lakatolás, etc..)!

Úgyhogy free RAM huszárok kíméljenek.

ADB-vel vagy WebADB-vel:
adb shell
cmd settings put global settings_enable_monitor_phantom_procs false
cmd device_config set_sync_disabled_for_tests persistent
cmd device_config put activity_manager max_phantom_processes 2147483647
cmd device_config put activity_manager max_cached_processes 256
cmd device_config put activity_manager max_empty_time_millis 43200000
cmd periodic enable false

vagy

adb shell cmd settings put global settings_enable_monitor_phantom_procs false
adb shell cmd device_config set_sync_disabled_for_tests persistent
adb shell cmd device_config put activity_manager max_phantom_processes 2147483647
adb shell cmd device_config put activity_manager max_cached_processes 256
adb shell cmd device_config put activity_manager max_empty_time_millis 43200000
adb shell cmd periodic enable false

Ha van root a készüléken akkor terminálból mehet így is:
su -c cmd settings put global settings_enable_monitor_phantom_procs false
su -c cmd device_config set_sync_disabled_for_tests persistent
su -c cmd device_config put activity_manager max_phantom_processes 2147483647
su -c cmd device_config put activity_manager max_cached_processes 256
su -c cmd device_config put activity_manager max_empty_time_millis 43200000
su -c cmd periodic enable false

vagy

su
cmd settings put global settings_enable_monitor_phantom_procs false
cmd device_config set_sync_disabled_for_tests persistent
cmd device_config put activity_manager max_phantom_processes 2147483647
cmd device_config put activity_manager max_cached_processes 256
cmd device_config put activity_manager max_empty_time_millis 43200000
cmd periodic enable false

Ellenőrzés:
adb shell
cmd settings get global settings_enable_monitor_phantom_procs
cmd device_config is_sync_disabled_for_tests
cmd device_config get activity_manager max_phantom_processes
cmd device_config get activity_manager max_cached_processes
cmd device_config get activity_manager max_empty_time_millis
cmd periodic dump | grep Enable

vagy

adb shell cmd settings get global settings_enable_monitor_phantom_procs
adb shell cmd device_config is_sync_disabled_for_tests
adb shell cmd device_config get activity_manager max_phantom_processes
adb shell cmd device_config get activity_manager max_cached_processes
adb shell cmd device_config get activity_manager max_empty_time_millis
adb shell cmd periodic dump | grep Enable

Visszaállítás - ugyanaz visszafelé:
ADB-vel vagy WebADB-vel:
adb shell
cmd settings reset global settings_enable_monitor_phantom_procs
cmd device_config set_sync_disabled_for_tests none
cmd device_config delete activity_manager max_phantom_processes
cmd device_config delete activity_manager max_cached_processes
cmd device_config delete activity_manager max_empty_time_millis
cmd periodic enable true

vagy

adb shell cmd settings reset global settings_enable_monitor_phantom_procs
adb shell cmd device_config set_sync_disabled_for_tests none
adb shell cmd device_config delete activity_manager max_phantom_processes
adb shell cmd device_config delete activity_manager max_cached_processes
adb shell cmd device_config delete activity_manager max_empty_time_millis
adb shell cmd periodic enable true

Ha van root a készüléken akkor terminálból mehet így is:
su -c cmd settings reset global settings_enable_monitor_phantom_procs
su -c cmd device_config set_sync_disabled_for_tests none
su -c cmd device_config delete activity_manager max_phantom_processes
su -c cmd device_config delete activity_manager max_cached_processes
su -c cmd device_config delete activity_manager max_empty_time_millis
su -c cmd periodic enable true

vagy

su
cmd settings reset global settings_enable_monitor_phantom_procs
cmd device_config set_sync_disabled_for_tests none
cmd device_config delete activity_manager max_phantom_processes
cmd device_config delete activity_manager max_cached_processes
cmd device_config delete activity_manager max_empty_time_millis
cmd periodic enable true

Meg egy restart, biztos ami sicher.

Ellenőrzés:
adb shell
cmd settings get global settings_enable_monitor_phantom_procs
cmd device_config is_sync_disabled_for_tests
cmd device_config get activity_manager max_phantom_processes
cmd device_config get activity_manager max_cached_processes
cmd device_config get activity_manager max_empty_time_millis
cmd periodic dump | grep Enable

vagy

adb shell cmd settings get global settings_enable_monitor_phantom_procs
adb shell cmd device_config is_sync_disabled_for_tests
adb shell cmd device_config get activity_manager max_phantom_processes
adb shell cmd device_config get activity_manager max_cached_processes
adb shell cmd device_config get activity_manager max_empty_time_millis
adb shell cmd periodic dump | grep Enable

Az írás alapja a régi a Magisk modulom itt és a benne található leírások.
Egyelőre a modult még nem frissítettem ugyanis tulajdonképpen nem tipikusan a rendszerbe kell systemless belenyúlni (file-t lecserélni, etc.) hanem tényleges rendszerparamétereket átírni - de az új modul template-el ugye van service.sh amivel boot-kor ezeket be lehet állítani meg van uninstall.sh amivel a Magisk modul uninstall-kor vissza lehet állítani mindent a fentiek szerint - szóval inkább csak lusta vagyok egyelőre megírni.. Frissítettem, elvileg működnie kellene mostmár.

És.. Hogy mit untam meg alapvetően? Random éjszakai logcat-ből részlet:
Date Time PID TID APP TAG Text

09-11 01:27:56.822 1000 2075 2123 I PeriodicCleaner: current focused package: com.android.chrome
09-11 01:27:56.824 1000 2075 2123 I ProcessManager: Kill reason PeriodicCleaner(4|2|pressure) from pid=2075
09-11 01:27:56.849 1000 2075 2123 I ProcessManager: PeriodicCleaner(4|2|pressure): kill com.facebook.orca Adj=400 State=10
09-11 01:27:56.850 1000 2075 2123 I ActivityManager: Killing 7223:com.facebook.orca/u0a275 (adj 400): PeriodicCleaner(4|2|pressure)
09-11 01:27:56.861 1000 2075 2123 I ProcessManager: PeriodicCleaner(4|2|pressure): kill com.facebook.orca:fwkstartlog Adj=935 State=19
09-11 01:27:56.861 1000 2075 2123 I ActivityManager: Killing 8249:com.facebook.orca:fwkstartlog/u0a275 (adj 935): PeriodicCleaner(4|2|pressure)
09-11 01:27:56.866 1000 2075 2123 I ProcessManager: PeriodicCleaner(4|2|pressure): kill dev.sasikanth.pinnit Adj=250 State=5
09-11 01:27:56.866 1000 2075 2123 I ActivityManager: Killing 5329:dev.sasikanth.pinnit/u0a240 (adj 250): PeriodicCleaner(4|2|pressure)
09-11 01:27:56.870 1000 2075 2123 I ProcessManager: PeriodicCleaner(4|2|pressure): kill com.life360.android.safetymapd Adj=400 State=10
09-11 01:27:56.870 1000 2075 2123 I ActivityManager: Killing 6709:com.life360.android.safetymapd/u0a542 (adj 400): PeriodicCleaner(4|2|pressure)
09-11 01:27:56.876 1000 2075 2123 I ProcessManager: PeriodicCleaner(4|2|pressure): kill com.google.android.webview:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:0 Adj=905 State=10
09-11 01:27:56.877 1000 2075 2123 I ActivityManager: Killing 9589:com.google.android.webview:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:0/u0a542i2 (adj 905): PeriodicCleaner(4|2|pressure)
09-11 01:27:56.879 1000 2075 2123 I ProcessManager: PeriodicCleaner(4|2|pressure): kill com.life360.android.safetymapd:service Adj=500 State=10
09-11 01:27:56.880 1000 2075 2123 I ActivityManager: Killing 6633:com.life360.android.safetymapd:service/u0a542 (adj 500): PeriodicCleaner(4|2|pressure)

Most komolyan..! :W
Kinyírni egy OOM ADJ 400-as folyamatot csak mert éjszaka nem nyomkodom a Messenger-t?
Kinyírni egy OOM ADJ 400-as folyamatot csak mert éjszaka nem nyomkodom a Life360 alkalmazást
ami egyébként pont arra hivatott hogy nézze merre járok (helyinfo megosztás családban)?
Kinyírni egy OOM ADJ 250-es (!!!) folyamatot csak mert éjszaka nem nyomkodom a Pinnit nevű alkalmazást
aminek egyébként van egy permanens értesítése ami pont azért (is) permanens hogy a rendszer ne lőhesse ki?!!

Mindezt úgy, hogy egyébként az empty max 8 és egyébként a lista 16 LRU elemet tartalmaz
de mégse az empty process-ek memóriáját szabadítja fel, hanem egy "erős" OOM ADJ-vel rendelkezőt?!
Mindezt úgy, hogy log szerint egyébként is van annyi felhasználható RAM mint égen a csillag..
Mindeközben foglalt file cache van 1.5GB (még csak nem is dirty, instant felszabadítható),
valamint 4GB ZRAM-ből 400 foglalt csak vagyis semmiféle memory pressure nincs..!
Miért nem azt szabadítja fel ahelyett hogy relatív erős adj-vel rendelkező, gyak. élő folyamatokat rugdos ki random?!
Még ekkora hülyeséget a hátán nem hordott a Föld mint ez a MIUI féle szabad memória spórolás.. teljesen értelmetlen! Ezúton innen is üdvözlöm a huszárokat..

Ha van root és csak a PeriodicCleaner-t akarod kikapcsolni akkor:
su
setprop persist.sys.periodic.enable false

vagy egysorosan:
su -c setprop persist.sys.periodic.enable false
Utána akár el is lehet távolítani a Magisk-et (vagy KernelSU-t, etc..) mert ez beírja a persist.sys.periodic.enable -t false értékkel a /data/property/persistent_properties -be így a ROM bármelyik prop file-jában bármi is van beállítva ezzel kapcsolatban az biztosan felül lesz írva false-al boot-kor így el se indul a PeriodicCleaner szolgáltatás.. Lejelentettem ezt amúgy Xiaomi.EU-n és ugyan tudnak róla de NEM kapcsolják ki.. Egyébként elvileg három ehhez tartozó prop van:
persist.sys.periodic.enable=false
persist.sys.periodic.fgtrim=false
persist.sys.periodic.startprocess.enable=false

Mindhármat érdemes kicsapni false-ra..
Ez így "maradandó" és túléli a reboot-ot így nem ez van a Magisk modulban (abban a szolgáltatás leállítása van) azért mert a Magisk modulok systemless-ek "kellenének" legyenek és nem akartam az uninstall script-et megírni hogy akkor uninstall-kor szedje ki mert ha nem rendes uninstall-al hanem pl. a modul mappa törlésével törlődik a modul akkor az uninstall script nem fut le és nem lesz maga után eltakarítva rendesen..

Ezen felül ami még kicsaphatja az alkalmazásokat az a backup.. mindegy hogy MIUI vagy Swift vagy bármi.. ami alkalmazást adatokkal ment az azzal kezdi hogy megállítja a folyamatait. Így tesz pl. a Google beépített backup-ja is így ha be van kapcsolva nem kell meglepődni hogyha éjjel, töltőn, sokáig tétlenül hagyott készüléken így is kipusztulnak a futó alkalmazások. Vagy ki kell akkor kapcsolni az automatikus backup-okat vagy élni kell a dologgal hogy mikor lefut a backup akkor ki lesz nyírva minden folyamat (service-eknek egyébként újra kell indulni, így pl. egy Messenger újra kellene kapjon értesítéseket de megnyitva azt a teljes alkalmazás nulláról indul).

Hozzászólások

(#1) nullpoint


nullpoint
senior tag

Ezzel várható előny a hosszabb üzemidő?

kdvsdmnkrvndttrlgsdnhzzszlsmt

(#2) crok válasza nullpoint (#1) üzenetére


crok
nagyúr

Nem, ahhoz nincs semmi köze. Ettől az lesz hogy nem fogja a rendszer random bezárogatni az alkalmazásaidat amik mondjuk 3..4-el ezelőtti taszkok. Meguntam ugyanis hogy 16 empty alkalmazás mellett is képes egyik-másik rendszer csak azért bezárni az 5..6 de akár már a 3..4 alkalmazásváltással ezelőtti taszkomat csak azért mert úgy döntött hogy nem lehet többet bent tartani a memóriában úgy, hogy amúgy a RAM fele - harmada semmire nincs használva. Mégiscsak marhaság egy 400-as oom adj score-al futó alkalmazást (mint pl. a Messenger) random folyamatait kinyírni csak azért mert 30 perce nem nyitottam meg az alkalmazást úgy, hogy van mellette 12 empty amiből ugyan bezárt 4-et mert 8 a max. amit 30 percnél tovább lehet "megtartani" de előtte és utána se volt se memory pressure se bármi alapja.. csak az hogy a periodic cleaner el kellett induljon és habozás nélkül kinyírt egy service-t mert olyanja volt a Xiaomi szoftvermérnökeinek. A többi dolog is le van írva a linkelt helyeken, el kell olvasni ;)

Ha egy hozzászólásomban linket látsz az hasznos referencia, hivatkozás vagy leírás és erősen ajánlott vagy minimum érdemes elolvasni. A Logout bejegyzéseim tele vannak hasznos Android tippekkel-trükkökkel, alkalmazásajánlással..

(#3) crok válasza nullpoint (#1) üzenetére


crok
nagyúr

Annyival javíthat max. hogy mivel ha visszamész nem kell nulláról vagy cache-ből visszatöltenie akkor annyival kevesebb energia fogy mert attól, hogy egy folyamat futó státuszban van még nem fog pörögni, de ha a tartalmát kidobják és vissza kell tölteni (pl. egy Messenger nagyságú alkalmazást..) az még soft start-al se kevés CPU ciklus, nemhogy hard start-al.

Ha egy hozzászólásomban linket látsz az hasznos referencia, hivatkozás vagy leírás és erősen ajánlott vagy minimum érdemes elolvasni. A Logout bejegyzéseim tele vannak hasznos Android tippekkel-trükkökkel, alkalmazásajánlással..

(#4) nullpoint


nullpoint
senior tag

Holnap nekiállok tesztelni. Xiaomi egy külön(beteg) állatfaj android rendszeren belül. :K

kdvsdmnkrvndttrlgsdnhzzszlsmt

(#5) crok válasza nullpoint (#4) üzenetére


crok
nagyúr

A periodic nevu service-t lodd ki mindenkepp, elotte-utana nezz egy logcat-et, keress arra benne hogy PeriodicCleaner - borzalom mit, mennyiszer es milyen ertelmetlenul tesz el lab alol....

Ha egy hozzászólásomban linket látsz az hasznos referencia, hivatkozás vagy leírás és erősen ajánlott vagy minimum érdemes elolvasni. A Logout bejegyzéseim tele vannak hasznos Android tippekkel-trükkökkel, alkalmazásajánlással..

(#6) DrBubo77 válasza crok (#5) üzenetére


DrBubo77
addikt

Ez csak Xiaomi készülékekre van?

ÉN VAGYOK a feltámadás és az élet. (János 11:25)

(#7) crok válasza DrBubo77 (#6) üzenetére


crok
nagyúr

Csak a PeriodicCleaner - minden más AOSP alap, minden Android-on működik Android 9 és felette (jó, van benne olyan ami majd csak 13 és felette de mindegy ha hozzáadod..).

Ha egy hozzászólásomban linket látsz az hasznos referencia, hivatkozás vagy leírás és erősen ajánlott vagy minimum érdemes elolvasni. A Logout bejegyzéseim tele vannak hasznos Android tippekkel-trükkökkel, alkalmazásajánlással..

(#8) tomi613 válasza crok (#7) üzenetére


tomi613
aktív tag

Szia!

Ilyen hardvernél is van értelme? Mert akkor kipróbálom! 😀

※ Samsung Galaxy S21 Ultra 5G (SM-G998B) Android 14 ESIM※

(#9) crok válasza tomi613 (#8) üzenetére


crok
nagyúr

Hát.. ha van amit kidobál a rendszered és ez zavar téged akkor van. Ezt csak te tudod hogy ezen a rendszeren neked van-e bajod vagy nincs (logcat-et nem adtál, azt meg nem írod hogy van-e kidobált alkalmazásod amit nem szerettél volna ha kidobál). Ha a RAM mennyiségére gondolsz mint mutató akkor a virtuális p.*zméregetésnek nem itt a helye ha azt mondom hogy 6GB RAM-ból 2.7 "szabad" a rendszer szerint de mégis kidobál dolgokat a szerencsétlenje.. akkor azt mondom hogy lehet értelme. De ha neked nincs problémád.. akkor mit javítanál? :U ;] Ha beállítanád mert kipróbálnád hát tedd.. ha nem akkor nem.. ha feltetted de visszaállítanád arra is ott van minden leírás. Hajrá, a döntést ne én hozzam már meg helyetted :D Bele is írom már a címbe hogy kifejezetten haladóknak ;]

Ha egy hozzászólásomban linket látsz az hasznos referencia, hivatkozás vagy leírás és erősen ajánlott vagy minimum érdemes elolvasni. A Logout bejegyzéseim tele vannak hasznos Android tippekkel-trükkökkel, alkalmazásajánlással..

(#10) tomi613 válasza crok (#9) üzenetére


tomi613
aktív tag

Nem f.sz méregetés volt. Bocs ha úgy jött le. :) De szeretem ha gyors a rendszer. És igen amúgy amatőr vagyok. A logcatot se tudom honnan kell kiszedni :P De azt hol is kell nézni?

[ Szerkesztve ]

※ Samsung Galaxy S21 Ultra 5G (SM-G998B) Android 14 ESIM※

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.