2 votos

/system/xbin/sh alto uso de cpu

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:

  1. ¿Qué es? system/xbin/sh ?
  2. ¿Qué puede ser la causa de que utilice tanto la CPU?
  3. ¿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 y top 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.

2voto

Lie Ryan Puntos 15629

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 a la memoria y utilizar length . Esto no debería ser un gran problema si el archivo de registro es pequeño, pero como usted dijo que el tamaño actual del archivo de registro es de más de 50MB, esto muestra que el archivo de registro no se está recortando correctamente. Otra cuestión preocupante es que los scripts de inicio se supone que sólo se ejecutan una vez en el arranque, pero este script obviamente se está ejecutando periódicamente.

Si mi suposición es correcta, es posible que pueda arreglar esto temporalmente borrando el archivo de registro, pero eventualmente la ralentización ocurrirá de nuevo cuando el archivo de registro se llene de nuevo. Comprueba si tienes la última versión de tu ROM, ¿quizás se haya solucionado en la última versión? De lo contrario, si se trata de una ROM sin mantenimiento, tendrás que encontrar la manera de arreglar el script.

-1voto

sîXXXÏs6 Puntos 1

Sólo soy ADIVINANDO pero ¿has probado a reducir el tamaño del búfer de registro? La función aparece en Opciones de desarrollo >Settings>Developer Options>Logger Buffer Size

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X