Neste documento, descrevemos como limitar os tempos de execução de tarefas e executáveis definindo tempos limite.
Um tempo limite especifica a quantidade de tempo que uma tarefa ou executável tem permissão para ser executada. O Batch não permite que jobs sejam executados por mais de 14 dias e não define tempos limite padrão para tarefas individuais e executáveis. Consequentemente, uma tarefa individual ou executável pode ser executada por até 14 dias antes da falha automática. No entanto, se as tarefas e os executáveis não forem destinados a serem executados por esse período, essa configuração poderá causar atrasos e custos inesperados. Para evitar tempos de execução excessivos, defina tempos limite para tarefas e executáveis.
Antes de começar
- Se você nunca usou o Batch, leia Primeiros passos com o Batch e ative-o concluindo os pré-requisitos para projetos e usuários.
-
Para receber as permissões necessárias para criar um job, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Editor de jobs em lote (
roles/batch.jobsEditor
) no projeto -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço do job, que, por padrão, é a conta de serviço padrão do Compute Engine
Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
-
Editor de jobs em lote (
Definir limites de tempo
É possível definir tempos limite para executáveis, tarefas ou ambos. O tempo limite especifica o tempo máximo de um executável. O tempo limite de uma tarefa especifica o tempo máximo de execução dela, que é a soma de todos os tempos de execução individuais dos executáveis dela. Por exemplo, se uma tarefa tiver três executáveis que são todos executados ao mesmo tempo por um minuto, o tempo de execução da tarefa é de três minutos, não de um minuto.
Se você definir tempos limite sobrepostos, como um tempo limite para uma tarefa executável e a executá-la, apenas um tempo limite precisará ser excedido para acionar a falha automática. Por exemplo, suponha que você defina o tempo limite de uma tarefa como 60 segundos e o tempo limite de cada um dos executáveis dessa tarefa como 120 segundos. Em seguida, esta tarefa de exemplo e todos os executáveis dela falham quando a soma dos tempos de execução dos executáveis excede 60 segundos, e é impossível acionar os tempos limite de 120 segundos.
Para escolher o tempo limite apropriado a ser definido para as tarefas e os executáveis do job, analise os registros de jobs semelhantes executados anteriormente para determinar o ambiente de execução típico das tarefas e dos executáveis para cargas de trabalho semelhantes.
Definir tempo limite para uma tarefa
Use a Google Cloud CLI ou a API REST para
criar um job que
inclua o
campo maxRunDuration
no objeto taskSpec
do arquivo JSON:
{
"taskGroups": [
{
"taskSpec": {
...
"maxRunDuration": "TIMEOUT"
}
}
]
}
Substitua TIMEOUT
pelo número máximo de segundos ou
seções fracionárias para que você quer permitir que a tarefa seja executada. Por exemplo, 255s
.
Um job que define um tempo limite de 255 segundos para uma tarefa teria um arquivo de configuração JSON semelhante ao seguinte:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
],
"maxRunDuration": "255s"
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Se o tempo limite de uma tarefa for excedido, ela falhará automaticamente e
o tempo limite excedido será indicado pelo código de saída 50005
nos
eventos e registros de status do job. Para mais informações sobre tempos limite excedidos, consulte a
documentação de solução de problemas do código de saída 50005.
Definir o tempo limite de um executável
Use a Google Cloud CLI ou a API REST para
criar um job que
inclua o
campo timeout
no objeto runnable
do arquivo JSON:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
...
"timeout": "TIMEOUT"
}
]
}
}
]
}
Substitua TIMEOUT
pelo número máximo de segundos ou
seções fracionárias em que você quer permitir a execução do executável. Por exemplo, 3.5s
.
Um job que define um tempo limite de 3,5 segundos para um executável teria um arquivo de configuração JSON semelhante ao seguinte:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
"timeout": "3.5s"
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Se o tempo limite de um executável for excedido, ele falhará automaticamente e
o tempo limite excedido será indicado pelo código de saída 50005
nos
eventos e registros de status do job. Para mais informações sobre tempos limite excedidos, consulte a
documentação de solução de problemas do código de saída 50005.
A seguir
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Visualizar jobs e tarefas
- Saiba mais sobre mais opções de criação de jobs.
- Saiba como analisar um job usando registros.