Solucionar problemas

En esta página se explica cómo resolver problemas con Cloud Profiler.

Errores en la configuración de tu proyecto Google Cloud

En esta sección se enumeran los problemas de configuración que puede encontrar y se ofrecen sugerencias para solucionarlos.

La API Cloud Profiler está inhabilitada

Se produce el siguiente error cuando la API Profiler no está habilitada en tu proyecto Google Cloud :

failed to create a profile, will retry: rpc error: code = PermissionDenied
desc = Cloud Profiler API has not been used in project 012345 before or it is disabled.

Para solucionar este problema, tu proyecto Google Cloud debe tener habilitada la API Profiler:

  1. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  2. Si se muestra API habilitada, significa que la API ya está habilitada. Si no es así, haz clic en el botón Habilitar.

El método llamador no tiene permiso

Se produce el siguiente error cuando no tienes permiso para escribir datos de creación de perfiles en un proyecto de Google Cloud :

failed to create a profile, will retry: rpc error: code = PermissionDenied
desc = The caller does not have permission.

Para solucionar este problema, pide a tu administrador que te conceda permisos adicionales en ese proyecto. Para ver una lista detallada de los permisos y roles necesarios, consulta Control de acceso.

Errores con Node.js

En esta sección se enumeran los problemas que puede encontrar al usar el agente de creación de perfiles de Node.js y se ofrecen sugerencias para solucionarlos.

La aplicación no se cierra normalmente con Node.js

El agente de creación de perfiles de Node.js interfiere con la salida normal del programa. El programa puede tardar hasta una hora en cerrarse después de que se hayan completado todas las tareas.

Para solucionar este problema, emite una señal SIGINT. Por ejemplo, puedes usar Ctrl-C. Cuando emites una señal SIGINT, el proceso finaliza correctamente.

Errores con Python

En esta sección se enumeran los problemas que puedes encontrar al usar el agente de creación de perfiles de Python y se ofrecen sugerencias para solucionarlos.

NotImplementedError con Python

Se produce la siguiente excepción durante la ejecución de la función start cuando la aplicación se ejecuta en un entorno que no es Linux:

NotImplementedError

Para solucionar este problema, ejecuta tu aplicación en un entorno Linux.

ValueError con Python

Se produce la siguiente excepción durante start cuando los argumentos de la función no son válidos, cuando no se puede determinar la información necesaria a partir de las variables de entorno y los argumentos, o cuando se inhabilitan tanto el tiempo de CPU como el tiempo real.

ValueError

Para solucionar este problema, comprueba lo siguiente:

  • Asegúrate de que el nombre y la versión del servicio cumplan los requisitos definidos en Argumentos de nombre y versión del servicio.
  • Si el perfil de pared está habilitado, asegúrate de que se llame a start desde el hilo principal.
  • Asegúrate de que estás usando una versión compatible de Python y de que la creación de perfiles de tiempo de CPU o de tiempo real está habilitada. Para obtener más información, consulta la función start.
  • Comprueba que has especificado el parámetro project_id como start si se ejecuta fuera de Google Cloud. Para obtener más información, consulta la función start.

Errores de recurso no disponible temporalmente con Python

El registro de errores contiene las siguientes entradas después de habilitar el Profiler:

BlockingIOError: [Errno 11] Resource temporarily unavailable
Exception ignored when trying to write to the signal wakeup fd

Estos mensajes se producen cuando una aplicación se registra con el descriptor de archivo de activación de señales, signal.set_wakeup_fd. De forma predeterminada, si el búfer del descriptor de archivo se llena, se registra una advertencia en stderr.

Cuando Cloud Profiler recoge perfiles, activa señales con alta frecuencia y puede provocar que se llene el descriptor de archivo de señal. Para consultar el problema de GitHub, consulta BlockingIOError en App Engine.

Para solucionar este problema, haz una de las siguientes acciones:

  • Si tu aplicación puede ejecutarse de forma segura cuando se pierden las señales, puedes usar Cloud Profiler. Si usas Python 3.7 o una versión posterior y quieres inhabilitar los mensajes de advertencia, pasa warn_on_full_buffer=False como parámetro a signal.set_wakeup_fd.

  • Si tu aplicación no puede ejecutarse de forma segura cuando se pierden las señales, te recomendamos que dejes de usar Cloud Profiler. Si sigues usándolo, es posible que se pierdan números de señal y que haya demasiadas entradas en el registro de errores.

Faltan todos los perfiles

Hay dos motivos habituales por los que puede que no veas ningún perfil:

  • El servicio no se ha ejecutado durante el tiempo suficiente para recoger perfiles.
  • El servicio no está configurado para la autenticación.

Para solucionar los problemas relacionados con un tiempo de ejecución breve, asegúrate de que tu servicio se ejecute de forma continua durante al menos 3 minutos.

Para resolver los problemas relacionados con la autenticación, asegúrate de que el agente de creación de perfiles pueda escribir datos en tu proyecto de Google Cloud :

  • Si tu servicio se ejecuta en Google Cloud, la autenticación es automática, excepto cuando despliegas un contenedor en Compute Engine. Cuando implementas un contenedor en Compute Engine, debes especificar elGoogle Cloud ID de tu proyecto en el comando del agente de Profilerstart. Para obtener instrucciones, consulta el artículo sobre vincular el agente a un proyecto. Google Cloud

  • Si tu servicio se ejecuta fuera de Google Cloud, debes crear una cuenta de servicio y vincular el agente de Profiler a tu proyecto deGoogle Cloud . Para obtener más información, consulta Crear perfiles de aplicaciones que se ejecutan fuera de Google Cloud.

    .

Faltan perfiles de un tipo específico

En esta sección se enumeran configuraciones específicas en las que no se recogen perfiles de uno o varios tipos de perfil. La primera sección contiene contenido general y las secciones restantes enumeran los problemas de idiomas específicos.

Información general

Si quieres ver un tipo de perfil específico, pero no hay ninguno disponible, comprueba lo siguiente:

En las secciones restantes de esta página se describen las configuraciones específicas de cada idioma en las que no se recogen datos de un tipo de perfil.

Go: no se recogen perfiles de tiempo de CPU para c-archives

Cuando se compila una aplicación Go con la marca -buildmode definida como c-archive o c-shared, el perfil de tiempo de CPU se inhabilita de forma predeterminada. Se recogen los perfiles de montículo, contención y conversación. Para obtener más información, consulta el problema de GitHub #993: el generador de perfiles no recoge datos de CPU del código Go en un archivo C.

Para solucionar este problema, habilita la recogida de perfiles de tiempo de CPU antes de las llamadas de servicio profiler.Start y añade una llamada a signal.Notify(make(chan os.Signal), syscall.SIGPROF). Para obtener más información sobre signal.Notify, consulta func Notify.

Java: no se recogen perfiles de montículo cuando hay varios creadores de perfiles habilitados

Has habilitado varios creadores de perfiles de montículo para una aplicación Java y no tienes ningún perfil.

El muestreador de montículo de Java se habilita como una función de agente independiente. Por lo tanto, solo se puede usar un generador de perfiles a la vez. Se ha abierto un error para ampliar Java y que admita varios generadores de perfiles de montículo. Para obtener información sobre ese error, consulta Añadir compatibilidad con varios agentes para el mecanismo de muestreo de montículos.

Para solucionar este problema, habilita un generador de perfiles.

Python: no hay tiempo de CPU ni perfiles de tiempo real al usar uWSGI

Cuando uWSGI usa varios procesos de trabajo para gestionar solicitudes, el comportamiento predeterminado es realizar la inicialización de la aplicación solo en el proceso principal (master). Los procesos bifurcados no realizan la secuencia de inicialización.

Si configuras el agente de creación de perfiles en la secuencia de inicialización de tu aplicación (por ejemplo, en el método AppConfig.ready() de una aplicación Django), el agente de creación de perfiles no se configurará para los procesos bifurcados.

Para resolver este problema, inicializa la aplicación en todos los procesos de trabajo configurando la marca lazy-apps en true.

Python: tiene perfiles de tiempo de CPU, pero no perfiles de tiempo real al usar uWSGI

El generador de perfiles de Wall depende del módulo de señales de Python. Cuando el intérprete de Python se compila con compatibilidad con subprocesos, la configuración predeterminada inhabilita el control de señales personalizadas para los procesos bifurcados.

Para solucionar este problema, en las aplicaciones uWSGI, habilita la gestión de señales personalizadas configurando la marca py-call-osafterfork en true.

Python: no hay perfiles para procesos bifurcados

Los agentes de creación de perfiles solo pueden crear perfiles del proceso que inició el agente.

Para solucionar este problema, si tu aplicación bifurca procesos y quieres recoger perfiles de los procesos bifurcados, inicializa el agente después de la bifurcación.