Ich verwende OS Monitor, um die CPU-Auslastung zu überprüfen, da ich in letzter Zeit einen drastischen Leistungsabfall festgestellt habe. Die App zeigt, dass system/xbin/sh
sie zwischen 10 % und 70 % der CPU verbraucht. Dies geschieht ständig, der Prozess hört nie auf, ganz oben in der Liste zu erscheinen. Ich habe zwei Fragen:
system/xbin/sh
?system/xbin/sh
?Mehr Info:
adb shell top
Ausgang:
PID PR CPU% S #THR VSS RSS PCY UID Name
6214 0 97% R 1 182528K 92452K root /system/xbin/sh
...
6211 0 0% S 1 1428K 448K root /system/xbin/sh
6212 0 0% S 1 53500K 52596K root /system/xbin/sh
...
adb shell ps
Ausgang:
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 544 404 ffffffff 00000000 S /init
...
root 6211 1 1428 448 ffffffff 00000000 S /system/xbin/sh
root 6212 6211 53500 52596 ffffffff 00000000 S /system/xbin/sh
root 6214 6212 293976 214156 ffffffff 00000000 R /system/xbin/sh
...
cat /proc/<pid>/cmdline
Ausgang:
"level 1" process: /system/xbin/sh /system/bin/debuggerd
"level 2" process: /system/xbin/sh /system/etc/init.d.loader
"level 3" process: /system/xbin/sh /system/etc/init.d.loader
/system/etc/init.d.loader
Inhalt:
#!/system/xbin/sh
############# ############# #############
# init.d.loader by puppet13th@xda
# Version 0.7 19 June 2012
# to run script in background append .bgrun to script name
# example : "myscript.bgrun"
# ############# ############# #############
logfile=/data/init.d.loader.log
loglength=65536
bgrunsign='.bgrun'
if [ -f $logfile ]
then
log=`cat $logfile`
currentloglength=`length "$log"`
if [ $currentloglength -gt $loglength ]
then
rm -f $logfile fi
fi
echo " * `date` * init.d.loader start . . .">>$logfile
echo " ">>$logfile
if [ ! -d /system/etc/init.d ]
then
echo " creating init.d folder . . .">>$logfile
mount -o remount rw /system >>$logfile 2>>$logfile
if [ -f /system/etc/init.d ]
then
rm -f /system/etc/init.d >>$logfile 2>>$logfile
fi
mkdir /system/etc/init.d >>$logfile 2>>$logfile
mount -o remount ro /system >>$logfile 2>>$logfile
fi
echo " ">>$logfile
echo " i : running init.d scripts . . .">>$logfile
for script in /system/etc/init.d/*
do
if [ -x $script ]
then
bgrun=`grep $bgrunsign $script`>/dev/null
if [ $? = 0 ]
then
echo " - running $script in background . . .">>$logfile
/system/xbin/sh $script & >>$logfile 2>>$logfile
else
echo " - running $script . . .">>$logfile
/system/xbin/sh $script>>$logfile 2>>$logfile
fi
fi
done
echo " ">>$logfile
echo " * `date` * init.d.loader end . . .">>$logfile
echo " ">>$logfile
/system/bin/debuggerd
Inhalt:
#!/system/xbin/sh
#init.d.loader
/system/etc/init.d.loader
/system/bin/debuggerd.bin
Suchen /data/local
nach Dingen, die andere Tools möglicherweise noch "einstecken init
" könnten: Es gibt vier leere Ordner und eine Datei mit dem Namen RootToolsMounts
. /data/local/RootToolsMounts
Inhalt:
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
/dev/block/platform/msm_sdcc.1/by-name/userdataorig /datamedia ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/userdataorig /ss ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,relatime,user_xattr,barrier=1,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 rw,nosuid,nodev,noatime,nodiratime,user_xattr,barrier=0,data=ordered,noauto_da_alloc,discard 0 0
/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 rw,nosuid,nodev,noatime,nodiratime,user_xattr,barrier=1,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/persist /persist ext4 rw,nosuid,nodev,relatime,user_xattr,barrier=1,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/modem /firmware ext4 ro,nosuid,nodev,relatime,user_xattr,barrier=1,data=ordered 0 0
/dev/block/platform/msm_sdcc.1/by-name/pds /pds ext3 rw,nosuid,noexec,relatime,barrier=0,data=writeback 0 0
/dev/fuse /storage/sdcard0 fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
/dev/block/vold/179:97 /storage/sdcard1 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
Betrachtet man /data/init.d.loader.log
(~50 MB Datei), führt es die init.d
Skripte ungefähr alle 10 Sekunden aus. Ich bin mit den zugrunde liegenden Komponenten von Android nicht allzu vertraut, daher bin ich mir nicht sicher, ob dies viel ist oder nicht. Die beiden Skripte darin /system/etc/init.d./
sind init.d.loader.test
und minfree
.
/data/init.d.loader.log
Inhalt:
Die Protokolldatei wird mit diesen Einträgen gefüllt, die sich alle 10-12 Sekunden wiederholen
...
* Sun Feb 23 18:46:09 CST 2014 * init.d.loader
start...
i: running init.d scripts...
- running /system/etc/init.d/init.d.loader.test...
- running /system/etc/init.d/minfree...
* Sun Feb 23 18:46:09 CST 2014 * init.d.loader
end...
* Sun Feb 23 18:46:20 CST 2014 * init.d.loader
start...
i: running init.d scripts...
- running /system/etc/init.d/init.d.loader.test...
- running /system/etc/init.d/minfree...
* Sun Feb 23 18:46:20 CST 2014 * init.d.loader
end...
...
init.d.loader.test
Inhalt:
#!/system/xbin/sh
# init.d.loader tester
# check /data/init.d.loader.test
echo init.d.loader test >/data/init.d.loader.test
minfree
Inhalt:
#!/system/xbin/sh
echo "2469,4938,6584,33756,36971,40186" > /sys/module/lowmemorykiller/parameters/minfree
Meine aktuelle Vermutung ist, dass das Skript viel CPU-Zeit in Anspruch genommen hat, da es eine sehr ineffiziente Methode zur Berechnung der Protokolldateilänge verwendet, nämlich die gesamte Protokolldatei in den Speicher zu lesen und zu verwenden length
. Dies sollte kein großes Problem sein, wenn die Protokolldatei klein ist, aber da Sie sagten, dass die aktuelle Größe der Protokolldatei mehr als 50 MB beträgt, zeigt dies, dass die Protokolldatei nicht richtig gekürzt wird. Ein weiteres besorgniserregendes Problem ist, dass Init-Skripte nur einmal beim Start ausgeführt werden sollen, dieses Skript jedoch offensichtlich regelmäßig ausgeführt wird.
Wenn meine Vermutung richtig ist, können Sie dies möglicherweise vorübergehend beheben, indem Sie die Protokolldatei löschen, aber schließlich tritt die Verlangsamung erneut auf, wenn die Protokolldatei wieder gefüllt wird. Überprüfen Sie, ob Sie die neueste Version Ihres ROM haben, vielleicht ist es in der neuesten Version behoben? Andernfalls müssen Sie, wenn es sich um ein nicht gewartetes ROM handelt, einen Weg finden, das Skript zu reparieren.
Ich vermute nur , aber haben Sie versucht, die Größe des Protokollpuffers zu verringern? Die Funktion ist in den Entwickleroptionen aufgeführt >Settings>Developer Options>Logger Buffer Size
t0mm13b
Fremde Schleife
ps
undtop
Ausgänge für hinzugefügt/system/xbin/sh
. Ich bin mir nicht sicher, ob dies helfen wird. Wenn das nicht hilft, werde ich wahrscheinlich nur das ROM löschen und von vorne beginnen. Es wird einfacher sein, als es App für App einzugrenzen.Lüge Ryan
Izzy
/data/local/RootToolsMounts
siehtfstab
für mich nach einer Form von aus (macht hier aber definitiv keinen Ärger).Lüge Ryan
tail <filename>
Befehl verwenden, um die letzten paar Zeilen in der Protokolldatei zu überprüfen, etwa fünfzehn Zeilen sollten vorerst ausreichen. Tail-Befehl:tail -n 15 /data/init.d.loader.log
t0mm13b
etc
Verzeichnis durchläuft und das System als wiederbeschreibbar neu einhängt ohne Ihr Wissen und deren Ausführung im Hintergrund. Meine Schlussfolgerung aus dem Lesen des oben Gesagten ist, dass dies ein falsches Skript als Teil vielleicht eines Rooting-Prozesses ist, das durchgerutscht ist, wenn man sich/proc/pid/cmdline
Level 2 ansieht, ist dies besorgniserregendinti.d.loader
(war dies eingefügt oder ein Tippfehler?). Das ist unerhört.Fremde Schleife
init.d.loader
. Ich habe den Entwickler des ROM auf droidrzr.com kontaktiert (der Thread auf dieser Seite ist derjenige, der vom Entwickler aktualisiert wird). Ich werde auch versuchen, puppet13th auf xda zu bekommen.t0mm13b
Lüge Ryan
length
. Dies sollte kein großes Problem sein, wenn die Protokolldatei klein ist, aber da Sie sagten, dass die aktuelle Größe der Protokolldatei mehr als 50 MB beträgt, zeigt dies, dass die Protokolldatei nicht richtig gekürzt wird. Ein weiteres besorgniserregendes Problem ist, dass Init-Skripte nur einmal beim Start ausgeführt werden sollen, dieses Skript jedoch offensichtlich regelmäßig ausgeführt wird.Lüge Ryan
Fremde Schleife
init.d.loader
. Danke für die Hilfe aller. Ich schätze es!