

Aviso de fim do suporte: em 20 de maio de 2026, AWS encerrará o suporte para AWS SimSpace Weaver. Depois de 20 de maio de 2026, você não poderá mais acessar o SimSpace Weaver console ou os SimSpace Weaver recursos. Para obter mais informações, consulte [AWS SimSpace Weaver Fim do suporte](https://docs.aws.amazon.com/simspaceweaver/latest/userguide/simspaceweaver-end-of-support.html). 

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Trabalhar com Service Quotas
<a name="working-with_quotas"></a>

Esta seção descreve como trabalhar com as cotas de serviço para SimSpace Weaver. As **cotas** também são chamadas de **limites**. Para uma lista de Service Quotas, consulte [SimSpace Terminais e cotas do Weaver](service-quotas.md). APIsNesta seção, são do conjunto de **aplicativos APIs**. O aplicativo APIs é diferente do serviço APIs. O aplicativo APIs faz parte do SDK do SimSpace Weaver aplicativo. Você pode encontrar a documentação do aplicativo APIs na pasta SDK do aplicativo em seu sistema local:

```
{{sdk-folder}}\SimSpaceWeaverAppSdk-{{sdk-version}}\documentation\index.html
```

**Topics**
+ [Obter os limites de um aplicativo](#working-with_quotas_get-app-limits)
+ [Obter a quantidade de recursos usados por um aplicativo](#working-with_quotas_get-app-resources)
+ [Redefinir métricas](#working-with_quotas_reset-metrics)
+ [Exceder um limite](#working-with_quotas_exceed-limit)
+ [Ficar sem memória](#working-with_quotas_out-of-memory)
+ [Práticas recomendadas](#working-with_quotas_best-practices)

## Obter os limites de um aplicativo
<a name="working-with_quotas_get-app-limits"></a>

É possível usar a API de aplicativo **RuntimeLimits** para consultar os limites de um aplicativo.

```
Result<Limit> RuntimeLimit(Application& app, LimitType type)
```Parâmetros

**Application& app**  
Uma referência ao aplicativo.

**Tipo de LimitType**  
Uma enumeração com os seguintes tipos de limite:  

```
enum LimitType {
    Unset = 0,
    EntitiesPerPartition = 1,
    RemoteEntityTransfers = 2,
    LocalEntityTransfers = 3
};
```

O exemplo a seguir consulta o limite de contagem de entidades.

```
WEAVERRUNTIME_TRY(auto entity_limit,
    Api::RuntimeLimit(m_app, Api::LimitType::EntitiesPerPartition))
Log::Info("Entity count limit", entity_limit.value);
```

## Obter a quantidade de recursos usados por um aplicativo
<a name="working-with_quotas_get-app-resources"></a>

É possível chamar a API de aplicativo **RuntimeMetrics** para obter a quantidade de recursos usados por um aplicativo:

```
Result<std::reference_wrapper<const AppRuntimeMetrics>> RuntimeMetrics(Application& app) noexcept
```Parâmetros

**Application& app**  
Uma referência ao aplicativo.

A API retorna uma referência a uma struct que contém as métricas. Um contador de métricas contém um valor total contínuo crescente. Um medidor de métricas contém um valor que pode aumentar ou diminuir. O runtime do aplicativo atualiza um contador sempre que um evento aumenta em valor. O runtime só atualiza os medidores quando você chama a API. O SimSpace Weaver garante que a referência seja válida durante toda a vida útil do aplicativo. Chamadas repetidas para a API não alterarão a referência.

```
struct AppRuntimeMetrics {
    uint64_t total_committed_ticks_gauge,

    uint32_t active_entity_gauge,
    uint32_t ticks_since_reset_counter,

    uint32_t load_field_counter,
    uint32_t store_field_counter,

    uint32_t created_entity_counter,
    uint32_t deleted_entity_counter,

    uint32_t entered_entity_counter,
    uint32_t exited_entity_counter,

    uint32_t rejected_incoming_transfer_counter,
    uint32_t rejected_outgoing_transfer_counter
}
```

## Redefinir métricas
<a name="working-with_quotas_reset-metrics"></a>

A API de aplicativo **ResetRuntimeMetrics** redefine os valores na struct `AppRuntimeMetrics`.

```
Result<void> ResetRuntimeMetrics(Application& app) noexcept
```

O exemplo a seguir demonstra como fazer chamadas **ResetRuntimeMetrics** pelo app.

```
if (ticks_since_last_report > 100)
{
    auto metrics = WEAVERRUNTIME_EXPECT(Api::RuntimeMetrics(m_app));
    Log::Info(metrics);

    ticks_since_last_report = 0;

    WEAVERRUNTIME_EXPECT(Api::ResetRuntimeMetrics(m_app));
}
```

## Exceder um limite
<a name="working-with_quotas_exceed-limit"></a>

Uma chamada de API do aplicativo que excede um limite retornará um `ErrorCode::CapacityExceeded`, exceto para transferências de entidades. O SimSpace Weaver trata as transferências de entidades de forma assíncrona como parte das operações da API de aplicativo **Confirmar** e **BeginUpdate**. Portanto, não há uma operação específica que retorne um erro se uma transferência falhar devido ao limite de transferência da entidade. Para detectar falhas de transferência, compare os valores atuais de `rejected_incoming_transfer_counter` e `rejected_outgoing_transfer_counter` (na struct `AppRuntimeMetrics`) com os valores anteriores. As entidades rejeitadas não estarão na partição, mas o aplicativo ainda poderá simulá-las.

## Ficar sem memória
<a name="working-with_quotas_out-of-memory"></a>

SimSpace Weaver usa um processo de coleta de lixo para limpar e liberar a memória liberada. É possível gravar dados mais rápido do que o coletor de lixo pode liberar memória. Se isso acontecer, as operações de gravação poderão exceder o limite de memória reservada do aplicativo. O SimSpace Weaver retornará um erro interno com uma mensagem que contém `OutOfMemory` e detalhes adicionais. Para obter mais informações, consulte [Distribua gravações ao longo do tempo](#working-with_quotas_best-practices_spread-writes).

## Práticas recomendadas
<a name="working-with_quotas_best-practices"></a>

As práticas recomendadas a seguir são diretrizes gerais para criar aplicativos e evitar ultrapassar limites. Elas podem não se aplicar ao design específico do seu aplicativo.

### Monitorar com frequência e diminuir a velocidade
<a name="working-with_quotas_best-practices_monitor"></a>

Você deve monitorar suas métricas com frequência e desacelerar as operações que estão perto de atingir um limite.

### Evite exceder os limites de assinatura e de transferência
<a name="working-with_quotas_best-practices_subscription-and-xfer"></a>

Se possível, projete sua simulação para reduzir o número de assinaturas remotas e transferências de entidades. É possível usar grupos de posicionamento para colocar várias partições no mesmo operador e reduzir a necessidade de transferências remotas de entidades entre operadores. 

### Distribua gravações ao longo do tempo
<a name="working-with_quotas_best-practices_spread-writes"></a>

O número e o tamanho das atualizações em uma marcação podem ter um impacto significativo no tempo e na memória necessários para confirmar uma transação. Grandes requisitos de memória podem fazer com que o runtime do aplicativo fique sem memória. É possível distribuir as gravações ao longo do tempo para reduzir o tamanho total médio das atualizações por marcação. Isso pode ajudar a melhorar o desempenho e evitar ultrapassar os limites. Recomendamos que você não escreva mais do que uma média de 12 MB em cada marcação ou 1,5 KB para cada entidade. 