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

4

Tengo un iMac (a principios de 2010) que ejecuta 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á en uso al 100% con el proceso de Java responsable del uso excesivo.

¿Qué he hecho para solucionar problemas?

  • Reiniciar : el proceso de Java simplemente se reinicia y se ve la misma condición.
  • Finalice el proceso de Java - Al igual que con un reinicio.
  • Desinstalar y reinstalar Java : poco después de instalar Java, la CPU vuelve al 100%.
  • Usando el "id de proceso" de ps. Puedo ver que se está iniciando y que genera el proceso y que el comando utilizado para iniciar el proceso es :

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

  • Se eliminó el archivo ics29586 : el archivo se vuelve a crear en el siguiente proceso de reinicio y se ve la misma condición
  • Creó una nueva cuenta de usuario, reinició e inició sesión como el nuevo usuario : se ve la misma condición.
  • Jugó con la configuración de Java y reinició el proceso después de cada cambio : se ha visto la misma condición.
  • Reconstrucción completa de la máquina : poco después de instalar Java, la CPU vuelve al 100%.

Entonces, ¿alguien tiene la respuesta para lo que lo está causando y cómo solucionarlo, o algún consejo sobre cómo solucionar el problema?

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

  • No estoy ejecutando crashplan.
  • No pude averiguar cómo hacer que el Monitor de actividad me muestre archivos abiertos, pero Google sugirió que LSOF era una buena opción para lo que querías saber. No mostraba archivos abiertos:

    Deep-Desk:LaunchAgents photo$ sudo lsof -c java
    Deep-Desk:LaunchAgents photo$ 
    
  • Hay 220 puertos abiertos para el proceso de Java en la actualidad

  • 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 bastante posterior a la manifestación del problema. A modo de prueba, he cambiado el nombre del archivo com.microsoft a old.com.microsoft, pero no hizo ninguna diferencia. También moví el archivo completamente fuera del directorio LaunchDaemons y eso tampoco hizo ninguna diferencia, el proceso todavía reaparece, se queda sin hacer mucho durante unos minutos, luego se sale de control y consume toda la CPU en 1 núcleo.

pregunta Slyinthefield 06.01.2012 - 15:36

3 respuestas

2

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
    

    -in / 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 para todos los demás ejecutables 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
    
  • Reventé la entrada del cron, eliminé el proceso java y no hay más problemas.

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

    sh-3.2# touch adjkerntz
    sh-3.2# chflags schg adjkerntz
    
  • Esto hace que el archivo sea inmutable e incluso la raíz no puede modificar ese archivo.

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

    
respondido por el Slyinthefield 07.01.2012 - 23:52
4

Yo tampoco lo sé, pero aquí hay cómo saber más

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

strings /tmp/ics29586 | less

Eche un vistazo a la salida y vea si es algo familiar.

Si falla eso, averigüe de qué trabajo de launchd se está iniciando:

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

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

Una vez que tenga las etiquetas de trabajo, obtenga la configuración launchd para un trabajo ejecutando:

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

Esto (y la etiqueta en sí, que a menudo contiene un nombre de dominio de Internet en notación inversa) debería proporcionarle más información sobre qué es este proceso. Siéntase libre de publicarlo aquí si necesita más ayuda.

Actualización: olvidé mencionar esto, pero como es un archivo jar, puedes copiarlo en algún lugar y descomprimirlo (los archivos jar son solo archivos zip) y ver qué tipo de Java las clases están ahí.

    
respondido por el Ingmar Hupp 06.01.2012 - 20:29
3

Si ingresas a la 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. Yo 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 sepa quién lo está utilizando, puede decidir si es algo que desea eliminar o no ...

    
respondido por el U007D 28.12.2012 - 15:04

Lea otras preguntas en las etiquetas