Estoy usando OS Monitor para observar el uso de la CPU porque últimamente he notado una disminución drástica del rendimiento. La aplicación muestra que system/xbin/sh
está consumiendo entre el 10 % y el 70 % de la CPU. Esto sucede constantemente, el proceso nunca deja de aparecer en la parte superior de la lista. Tengo dos preguntas:
system/xbin/sh
?system/xbin/sh
?Más información:
adb shell top
producción:
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
producción:
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
producción:
"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
contenido:
#!/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
contenido:
#!/system/xbin/sh
#init.d.loader
/system/etc/init.d.loader
/system/bin/debuggerd.bin
Comprobación /data/local
de cosas que otras herramientas podrían haber dejado para "conectarse init
": hay cuatro carpetas vacías y un archivo llamado RootToolsMounts
. /data/local/RootToolsMounts
contenido:
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
Mirando /data/init.d.loader.log
(archivo de ~ 50 MB), está ejecutando los init.d
scripts aproximadamente cada 10 segundos. No estoy muy familiarizado con los componentes subyacentes de Android, así que no estoy seguro de si esto es mucho o no. Los dos scripts en /system/etc/init.d./
son init.d.loader.test
y minfree
.
/data/init.d.loader.log
contenido:
El archivo de registro se llena con estas entradas que se repiten cada 10-12 segundos
...
* 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
contenido:
#!/system/xbin/sh
# init.d.loader tester
# check /data/init.d.loader.test
echo init.d.loader test >/data/init.d.loader.test
minfree
contenido:
#!/system/xbin/sh
echo "2469,4938,6584,33756,36971,40186" > /sys/module/lowmemorykiller/parameters/minfree
Mi suposición actual es que el script tomó mucho tiempo de CPU porque usa una forma muy ineficiente de calcular la longitud del archivo de registro, que es leer todo el archivo de registro en la memoria y usar length
. Esto no debería haber sido un gran problema si el archivo de registro es pequeño, pero dado que dijo que el tamaño actual del archivo de registro es de más de 50 MB, esto muestra que el archivo de registro no se recorta correctamente. Otro problema preocupante es que se supone que los scripts de inicio solo se ejecutan una vez al inicio, pero obviamente este script se ejecuta periódicamente.
Si mi suposición es correcta, es posible que pueda solucionar esto temporalmente eliminando el archivo de registro, pero eventualmente la ralentización ocurrirá nuevamente cuando el archivo de registro se llene nuevamente. Compruebe si tiene la última versión de su ROM, ¿tal vez esté arreglado en la última versión? De lo contrario, si se trata de una ROM sin mantenimiento, deberá encontrar una forma de corregir el script.
Solo estoy ADIVINANDO, pero ¿ha intentado reducir el tamaño del búfer de registro? La función aparece en Opciones de desarrollo >Settings>Developer Options>Logger Buffer Size
t0mm13b
extrañobucle
ps
ytop
para/system/xbin/sh
. No estoy seguro de si esto ayudará. Si esto no ayuda, probablemente voy a borrar la ROM y empezar de nuevo. Será más fácil que reducirlo aplicación por aplicación.miente ryan
izzy
/data/local/RootToolsMounts
parece una forma defstab
(pero definitivamente no está causando problemas aquí).miente ryan
tail <filename>
comando para verificar que se muestren las últimas líneas en el archivo de registro? Unas quince líneas deberían ser suficientes por ahora. Comando de cola:tail -n 15 /data/init.d.loader.log
t0mm13b
etc
directorio, volviendo a montar el sistema como reescribible sin su conocimiento y ejecutarlos en segundo plano. Mi conclusión de leer lo anterior es que este es un script falso como parte de un proceso de enraizamiento, que se deslizó, mirar su/proc/pid/cmdline
nivel 2 es motivo de preocupacióninti.d.loader
(¿se pegó esto o fue un error tipográfico?) Eso es inaudito.extrañobucle
init.d.loader
. Me puse en contacto con el desarrollador de la ROM en droidrzr.com (el hilo en ese sitio es el que actualiza el desarrollador). También intentaré ponerme en contacto con puppet13th en xda.t0mm13b
miente ryan
length
. Esto no debería haber sido un gran problema si el archivo de registro es pequeño, pero dado que dijo que el tamaño actual del archivo de registro es de más de 50 MB, esto muestra que el archivo de registro no se recorta correctamente. Otro problema preocupante es que se supone que los scripts de inicio solo se ejecutan una vez al inicio, pero obviamente este script se ejecuta periódicamente.miente ryan
extrañobucle
init.d.loader
. Gracias por la ayuda de todos. ¡Te lo agradezco!