Estoy usando OS Monitor para ver el uso de la CPU porque he notado una disminución drástica del rendimiento últimamente. 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:
- ¿Qué es?
system/xbin/sh
? - ¿Qué puede ser la causa de que utilice tanto la CPU?
- ¿Existe una forma de rastrear qué aplicaciones hacen llamadas a
system/xbin/sh
?
Más información:
- Versión para Android: 4.1.2
- Teléfono: Motorola DROID RAZR MAXX HD
- ROM: Droid Nexesque v3.8 (ROM basada en AOSP) (a través de safestrap)
- Arraigo: sí
- no ejecutar ningún antivirus o similar
adb shell top
de salida:
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
de salida:
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
de salida:
"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 de /data/local
para cosas que otras herramientas podrían haber dejado para "enchufar". 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 el 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 de 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
0 votos
PD: ¿Ha leído este
0 votos
@t0mm13b He leído eso, pero eso no parece ayudar a mi problema. He añadido el
ps
ytop
salidas para/system/xbin/sh
. No estoy seguro de si esto ayudará. Si esto no ayuda, probablemente voy a limpiar la ROM y empezar de nuevo. Será más fácil que reducirlo aplicación por aplicación.1 votos
Parece que este script está entrando en un bucle infinito o algo parecido. ¿Puedes comprobar el contenido del archivo de registro del script: /data/init.d.loader.log y observar durante los próximos cinco minutos si el archivo de registro está cambiando o se está escribiendo en él.
1 votos
Para lo que el script se supone que debe hacer, sólo debe ejecutar una vez en el arranque IMHO. Por cierto
/data/local/RootToolsMounts
parece una forma defstab
a mí (pero definitivamente no está causando el problema aquí).0 votos
@StrangerLoop: Tu ROM viene con busybox, si es así puedes usar el
tail <filename>
para comprobar las últimas líneas del archivo de registro, unas quince líneas deberían ser suficientes por ahora. Comando Tail:tail -n 15 /data/init.d.loader.log
0 votos
Desde la secuencia de comandos, que parece muy sospechoso, si yo fuera usted OP, me persiguen el tipo de más de XDA ( marioneta13a@xda ) y averigua exactamente por qué se repiten todos los scripts en
etc
volviendo a montar el sistema como regrabable sin tu conocimiento y ejecutándolos en segundo plano. Mi conclusión de la lectura de lo anterior es, este es un script falso como parte de tal vez, un proceso del rooting, que se deslizó a través de, mirando a/proc/pid/cmdline
El nivel 2 es preocupante,inti.d.loader
(¿se ha pegado o es una errata?) Es inaudito.0 votos
@t0mm13b Definitivamente un error tipográfico, debe decir
init.d.loader
. He contactado 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.0 votos
Me alegro de que sea una errata... :)
1 votos
Mi conjetura actual es que el script tomó mucho tiempo de CPU porque utiliza una forma muy ineficiente de calcular la longitud del archivo de registro, que es leer todo el archivo de registro en la memoria y utilizar
length
. Esto no debería haber sido un gran problema si el archivo de registro es pequeño, pero ya que usted dijo que el tamaño actual del archivo de registro es de más de 50 MB, esto demuestra que el archivo de registro no está siendo recortado correctamente. Otra cuestión preocupante es que los scripts init se supone que sólo se ejecutan una vez en el arranque, pero este script es, obviamente, se ejecuta periódicamente.0 votos
Si mi suposición es correcta, es posible que puedas arreglar esto temporalmente borrando el archivo de registro, pero eventualmente la ralentización volverá a ocurrir cuando el archivo de registro se llene de nuevo. Comprueba si tienes la última versión de tu ROM, ¿quizás esté solucionado en la última versión? De lo contrario, si se trata de una ROM sin mantenimiento, tendrás que encontrar una manera de arreglar el script.
0 votos
@LieRyan ¡Tenías razón! Eso arregló el problema por ahora, pero como dijiste, con el tiempo va a reaparecer. Estoy en la última versión de la ROM, por desgracia. Me pondré en contacto con la ROM dev y el dev que escribió
init.d.loader
. Gracias por la ayuda de todos. Os lo agradezco.