Information for: DEVELOPERS   PARTNERS

Tuning your server configuration

Computers have a finite amount of resources (including CPU power, memory, and disk space). Hosting companies allocate these resources differently according to the common uses of the servers they maintain. Cloud Platform optimizes resources for hosting Drupal applications. Acquia’s mission is to provide the best Drupal hosting platform, while also recognizing the need to allow for customization. Acquia’s server tuning formula provides a balance of stability, performance, and customization

To understand server tuning, it is important to understand these key concepts:

  • PHP process - A PHP process is used whenever a page request reaches a web server. One PHP process is required for each page request
  • Memcache - A system used to store Drupal’s cache tables in server memory, rather than on the hard drive
  • Opcode cache - A PHP caching layer, OPcache, which speeds up code execution time by caching compiled PHP
  • PHP memory - Memory reserved for a PHP process to store variables and use when computing

Acquia tunes servers to allocate half the memory for the database (or less, in the case of multi-tier Cloud Platform Enterprise instances) and 200 MB for the operating system. The remaining memory can be allocated among Memcache, opcode caching, and PHP.

Applications and PHP processes

Cloud Platform hosts servers using Amazon’s EC2 infrastructure. The processing power of EC2 servers is measured in units called Elastic Computing Units (ECUs). As a general rule, it is best to run no more PHP processes per application than three times the ECU of the server.

By default, Cloud Platform provisions each application with three environments: Development, Staging, and Production. This means a server running three applications must support nine docroots. While these environments will share some resources, like CPU and MySQL memory, as needed, other resources like PHP processes have per-environment and per-server limits which help ensure overall hosting stability. These limits cannot be modified to allocate more or fewer processes to a single environment.

Note

PHP process limits will be reduced server-wide if more environments are added to your server, or if any memory limits (PHP, opcode cache, Memcache) are increased beyond their default values. As a result, we strongly recommend that customers carefully consider the impact of these changes to existing applications before making them.

When you are deciding how big a server you need to purchase, it is important to make sure that you will have at least one available PHP process per application. The more PHP processes an application is allocated, the greater the number of simultaneous page views the server can handle. When a server does not have an available PHP process for a page request, Cloud Platform displays a 503 “Service Unavailable” error message to the visitor. On an Acquia-hosted application, the 503 error message appears similar to the following:

503 error page

Note

For information about how Cloud Platform handles HTTP 5xx status codes, see HTTP 5xx status codes on Cloud Platform

When a Drupal application receives a page request, but there are no PHP processes available or able to be spawned to handle it immediately, the application skips the spawn request and waits for a process to become available. This is called skip-spawning. After a while, the application stops waiting to handle the request and the request fails with a “Temporarily Unavailable” message.

If your application returns frequent HTTP 503 status codes caused by skip-spawning, you have two primary options for increasing the number of available PHP processes:

  • Optimize the code running the application
  • Purchase larger hardware

While purchasing larger hardware is an immediate solution, there are circumstances where inefficiencies in the application code prevent larger hardware from yielding benefits. It is always a good idea to attempt to optimize an application, even if you wind up purchasing larger hardware. For more information about optimizing your applications, see Improving application performance.