English | Site Directory

Quotas

An App Engine application can consume resources up to certain maximums, or quotas. With quotas, App Engine ensures that your application won't exceed your budget, and that other applications running on App Engine won't impact the performance of your app.

Adjustable and Fixed Quotas

Each App Engine resource is measured against one of two kinds of quota: an adjustable quota or a fixed quota.

Adjustable quotas are resource maximums set by you, the application's owner, to prevent the cost of the application from exceeding your budget. These resources represent the way apps tend to grow as more people use it, such as the amount of data kept in the datastore, or the amount of incoming and outgoing network bandwidth used. Every application gets an amount of each adjustable quota for free.

During App Engine's preview period, adjustable quotas are set at the free levels for all apps. A future release will allow you to associate a billing account with an app, and change the adjustable quotas beyond these levels. You will only pay for what your app actually consumes, but never more than what you specify for the adjustable quotas.

Fixed quotas are resource maximums set by App Engine to ensure the integrity of the system. These resources describe the boundaries of the architecture, and all applications are expected to run within the same limits. They ensure that another app that is consuming too many resources will not affect the performance of your app.

How Resources are Replenished

App Engine records how much of each resource an application uses in a calendar day, and considers the resource depleted when this amount reaches the app's quota for the resource. A calendar day is a period of 24 hours beginning at midnight, Pacific Time. App Engine resets all resource measurements at the beginning of each day, except for Stored Data which always represents the amount of datastore storage in use.

Historical note: The 24-hour replenishment cycle was introduced in December 2008. It replaced a more complicated system of "continuous" replenishment, to make it easier to report and control resource usage.

Burst Limits

In addition to the 24-hour quotas, App Engine moderates how quickly an app can consume a resource, using burst limits. This protects the app from consuming all of its quota in very short periods of time, such as due to sudden popularity or an inefficiency in the code. Burst limits allow an app to consume quota at a sharply increased rate for a short period of time.

If your application consumes a resource at too high a rate for too long and is in danger of hitting one of the burst limits, the word "Limited" will appear by the appropriate quota on the Quota Details screen in the Admin Console. If the burst limited quota includes other quotas, such as Requests which includes Secure Requests, the included quotas will also be limited until the traffic increase subsides.

We will publish more information about burst limits when we release the billing feature in 2009.

When a Resource is Depleted

When an app consumes all of an allocated resource, the resource becomes unavailable until the quota is replenished.

For resources that are required to initiate a request, when the resource is depleted, App Engine returns an HTTP 403 Forbidden status code for the request instead of calling a request handler. The following resources have this behavior:

  • Requests
  • CPU Time
  • High CPU Requests
  • Bandwidth, incoming and outgoing

For all other resources, when the resource is depleted, an attempt in the app to consume the resource results in an exception. This exception can be caught by the app and handled, such as by displaying a friendly error message to the user. In the Python API, this exception is apiproxy_errors.OverQuotaError.

Resources

An application may use the following resources, subject to quotas. Resources measured against adjustable quotas are indicated with "(adjustable)." Resource amounts represent an allocation over a 24 hour period. To see the quota amounts for your application, use the Administrator Console.

Quotas marked "(adjustable)" behave as fixed quotas during this preview period. When the billing feature is released, these quotas will be adjustable by the owner of the billing account.

Requests

Requests
The total number of requests to the app.
Outgoing Bandwidth (adjustable)
The amount of data sent by the app in response to requests.
Incoming Bandwidth (adjustable)
The amount of data received by the app from requests.
CPU Time (adjustable)

The total processing time for handling requests, including time spent running the app and performing datastore operations. This does not include time spent waiting for other services, such as waiting for a URL fetch to return or the image service to transform an image.

CPU time is reported in "seconds," which is equivalent to the number of CPU cycles that can be performed by a 1.2 GHz Intel x86 processor in that amount of time. The actual number of CPU cycles spent varies greatly depending on conditions internal to App Engine, so this number is adjusted for reporting purposes using this processor as a reference measurement.

High CPU Requests

The number of times a single request handler exceeded a safety threshold for CPU time, about 0.84 CPU seconds per request. Datastore CPU time does not count towards the high CPU threshold (though it does count toward the CPU Time total). High CPU requests are limited to 2 per (clock-time) minute.

Ideally, an app would never exceed this threshold. This quota exists to help you identify and eliminate high-CPU activity from your request handlers. We are working on improving the way App Engine mitigates the impact of high-CPU requests, and we expect to make adjustments to this quota in the future.

Note that the high CPU threshold is separate from the request deadline, which terminates the request after a number of (clock-time) seconds.

To learn more about High CPU Requests, see the FAQ.

Secure Requests
The number of requests that used a secure connection (HTTPS). Secure requests also count towards the Requests quota.
Secure Outgoing Bandwidth (adjustable)
The amount of data send by the app over a secure connection in response to requests. Secure outgoing bandwidth also counts toward the Outgoing Bandwidth quota.
Secure Incoming Bandwidth (adjustable)
The amount of data received by the app over a secure connection from requests. Secure incoming bandwidth also counts toward the Incoming Bandwidth quota.

Datastore

Datastore API Calls
The total number of times the app retrieved, created, updated or deleted an entity, or performed a query.
Stored Data (adjustable)
The amount of data stored in entities. This does not currently include storage space used for indexes, only the space used by the entities themselves (properties and keys).
Data Sent to API
The amount of data sent to the datastore when creating or updating an entity, or performing a query.
Data Received from API
The amount of data returned by the datastore when retrieving an entity or performing a query.
Datastore CPU Time
The time spent performing datastore operations. Datastore CPU cycles also count toward the CPU Time quota. See CPU Time, above, for details on how CPU time is calculated.

Mail

Mail API Calls
The total number of times the app accessed the mail service to send an email message.
Recipients Emailed (adjustable)
The total number of recipients to whom the app has sent email messages.
Admins Emailed
The total number of application admins to whom the app has send email messages.
Message Body Data Sent
The amount of data sent in the body of email messages. This also counts toward the Outgoing Bandwidth quota.
Attachments Sent
The total number of attachments sent with email messages.
Attachment Data Sent
The amount of data sent as attachments to email messages. This also counts toward the Outgoing Bandwidth quota.

URL Fetch

URL Fetch API Calls
The total number of times the app accessed the URL fetch service to perform an HTTP or HTTPS request.
URL Fetch Data Sent
The amount of data sent to the URL fetch service in requests. This also counts toward the Outgoing Bandwidth quota.
URL Fetch Data Received
The amount of data received from the URL fetch service in responses. This also counts toward the Incoming Bandwidth quota.

Image Manipulation

Image Manipulation API Calls
The total number of times the app access the image service.
Data Sent to API
The amount of data sent to the image service.
Data Received from API
The amount of data received from the image service.
Transformations executed
The number of times the service performed an image transformation for the app.

Memcache

Memcache API Calls
The total number of times the app accessed the memcache service to get, set or expire values.
Data Sent to API
The amount of data sent to the memcache.
Data Received from API
The amount of data received from the memcache.

Deployments

Deployments
The number of times the app has been uploaded by a developer.