4 votos

¿Por qué Java consume el 100% de la CPU en mi máquina?

Tengo un iMac (principios de 2010) corriendo 10.7.2 pero el problema se ha visto en 10.6.x también. El síntoma es simple, uno de mis 2 núcleos está sentado en el 100% de utilización con el proceso de Java responsable del uso excesivo.

¿Qué he hecho para solucionar el problema?

  • Reiniciar - El proceso java simplemente se reinicia y se ve la misma condición.

  • Matar el proceso Java - Como con un reinicio.

  • Desinstalar y volver a instalar Java - Poco después de instalar Java la CPU vuelve a estar al 100%.

  • Usando ps "process id" puedo ver que es launchd el que genera el proceso y que el comando usado para iniciar el proceso es :

    java -Djava.awt.headless=true -jar /tmp/ics29586
  • El archivo ics29586 es un archivo binario de 11mb.

  • Eliminado el archivo ics29586 - El archivo se vuelve a crear en el siguiente reinicio del proceso y se ve la misma condición

  • Creé una nueva cuenta de usuario, reinicié y me conecté como el nuevo usuario - Se ve la misma condición.

  • He jugado con la configuración de Java y he reiniciado el proceso después de cada cambio - La misma condición vista.

  • Reconstrucción completa de la máquina - Poco después de instalar Java la CPU vuelve a estar al 100%.

Así que, ¿alguien tiene la respuesta a lo que está causando y cómo solucionarlo, o algún consejo sobre las formas de seguir solucionando el problema?


En respuesta a algunos de los comentarios que piden más información:

  • No estoy ejecutando crashplan.

  • No pude averiguar cómo hacer que el Monitor de Actividad me mostrara los archivos abiertos, pero al buscar en Google me sugirió que LSOF era una buena opción para lo que quería saber. No mostró ningún archivo abierto:

    Deep-Desk:LaunchAgents photo$ sudo lsof -c java
    Deep-Desk:LaunchAgents photo$ 
  • Actualmente hay 220 puertos abiertos para el proceso Java

  • El único archivo de interés en las carpetas LaunchDaemons o LaunchAgents es:

    -rw-r--r--   1 root  wheel   568B 10 Mar  2011 com.microsoft.office.licensing.helper.plist     
  • Todo lo demás es com.apple o tiene una fecha muy posterior a la manifestación del problema. A modo de prueba he renombrado el archivo com.microsoft a old.com.microsoft pero no ha habido diferencia. También he movido el archivo completamente fuera del directorio LaunchDaemons y eso tampoco ha hecho ninguna diferencia, el proceso sigue reapareciendo, se queda sin hacer nada durante unos minutos, y luego se descontrola y consume toda la CPU en 1 núcleo.

4voto

Jasmine D Puntos 1

Yo tampoco lo sé, pero aquí tienes cómo averiguar más

En los casos de binarios totalmente desconocidos, cadenas(1) suele ser útil para obtener una pista sobre lo que podría ser el archivo

strings /tmp/ics29586 | less

Echa un vistazo a la salida y ver si es algo familiar.

Si no es así, averigüe desde qué trabajo de launchd se está lanzando:

launchctl list|awk '{id=$3; print "### " id; system("launchctl list " id)}'|awk '/^###/ {id=$2} /.*ics29586.*/ {print id}'

Esto debería producir una o más etiquetas de trabajo en forma de (por ejemplo) com.apple.scrod (y algunos errores, que puedes ignorar).

Una vez que tengas la(s) etiqueta(s) del trabajo, obtén la configuración de launchd para un trabajo ejecutando:

launchctl list com.apple.scrod    # insert your tag instead

Esto (y la propia etiqueta, que a menudo contiene un nombre de dominio de Internet en notación inversa) debería darle algo más de información sobre lo que es este proceso. No dudes en publicarlo aquí si necesitas más ayuda.

Actualización: Se me olvidó mencionar esto, pero como es un archivo jar, puedes copiarlo en algún lugar y descomprimirlo (los archivos jar son realmente sólo archivos zip) y echar un vistazo a qué tipo de clases Java hay allí.

3voto

bRad Gibson Puntos 131

Si te metes en el terminal, puedes escribir ps -ef | grep java

Verás todos los procesos con "java" en sus descripciones y detalles sobre el proceso que lanzó cada uno de ellos.

En mi caso, CrashPlan está haciendo una restauración y la aplicación cliente está basada en Java. Ya veo:

0    85     1   0 10:35PM ??        98:28.26 /usr/bin/java -Dapp=**CrashPlanService** -Xmn10m -Xms15m -Xmx512m -DappBaseName=**CrashPlan** -Djava.awt.headless=true -...

Una vez que sepas quién lo utiliza, podrás decidir si es algo que quieres eliminar o no...

2voto

PeteL Puntos 16

Lo tengo. Después de la ayuda de dos amigos, puedo decir lo siguiente.

  • en /etc/crontab había una entrada:

    */5 * * * * root /usr/bin/adjkerntz

    -en /usr/bin había un programa llamado adjkerntz. Creo que este es un nombre genuino para un binario válido en algunas implementaciones de unix/linux, pero no en OSX. También tiene permisos diferentes a cualquier otro ejecutable en /us/bin:

    -rwxr-xr-x    1 root   wheel     74688 18 Sep 00:26 addftinfo
    -rwx------    1 root   wheel   2841604 18 Sep 20:49 adjkerntz
    -rwxr-xr-x    1 root   wheel    223312 18 Sep 00:26 afconvert
  • He arreglado la entrada del cron y he matado el proceso java y, de repente, no hay más problemas.

  • También borré adjkerntz y por sugerencia de mis excelentes amigos, hice lo siguiente para que no vuelva a ocurrir:

    sh-3.2# touch adjkerntz
    sh-3.2# chflags schg adjkerntz
  • Esto hace que el archivo sea inmutable y que ni siquiera Root pueda modificar ese archivo.

Esto deja la pregunta de cómo llegó allí en primer lugar, pero supongo que Internet puede ser un lugar peligroso. Gracias a todos los que han contribuido con su tiempo a ayudarme a llegar al fondo de esto.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple 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