Sunday, October 18, 2009

Installing APC in Windows

Installing APC in Windows

From MoodleDocs

Jump to: navigation, search


1 Introduction

2 Installation on Windows Server

2.1 Download the correct version

2.2 Enable the APC extension in your PHP.INI file

2.3 Check the memory available

2.4 Customizing APC settings for Moodle

2.5 Set the temp directory

3 Monitoring and tuning the cache

4 Checking performance

5 Uninstalling APC

6 See also


APC (Alternative PHP Cache) is a PHP opcode cache. It stores PHP pages in RAM and reduces hard disk activity. This makes a real difference to the performance in Moodle, and you should be able to achieve a 50% increase in system capacity and your CPU will be 50% less busy.

This guide is for installation of APC on a Windows server. The instructions have been tested on a Windows 2003 server, and they should also be applicable if you are using Windows XP as a test server.

Installation on Windows Server

Warning: You cannot install APC and Zend Optimiser on the same server. You should choose one or the other.

Follow these steps to install APC.

Download the correct version

Download the windows binary for the PHP version you have installed from Save into the PHP extensions folder, which is c:\php\ext by default.

Note: Make sure you choose the right extension for your version (branch) of PHP.

Enable the APC extension in your PHP.INI file

Edit the php.ini file and add the following line in the extensions section:

extension = php_apc.dll

Check that this has worked by restarting your web server and looking at the output of phpinfo from the Moodle administration screens or from a text file containing this line:

Check the memory available

To check the amount of memory that is available for APC to use:

Run WordPad and create a text file called apcmeminfo.php.

Copy and paste this line into the file

Save the file into moodle/admin/apcmeminfo.php

Browse to

Note the avail_mem value (in bytes)

... [avail_mem] => 31447368 ...

The total amount of memory used by the cache is given by this formula:

total_memory = apc.shm_segments * apc.shm_size

In this example, the available memory is approx 32Mb. Usually if we need more than 32Mb in our cache, we should increase the number of segments that APC uses. However, this is can cause web server faults, so it is best to increase the segment size instead.

When setting the total memory available for the cache, start with the lowest that a single Moodle install can work with (64Mb). This amount may not be enough if you have extra modules and blocks installed, so check by monitoring the cache regularly in the first two weeks that your server is running. Look at the monitoring section below and gradually increase your total cache memory until there is no more cache churn.

Customizing APC settings for Moodle

The default APC settings are as follows:

apc.cache_by_default = On

apc.enable_cli = Off

apc.enabled = On

apc.file_update_protection = 2

apc.filters =

apc.gc_ttl = 3600

apc.include_once_override = Off

apc.max_file_size = 1M

apc.num_files_hint = 1000

apc.optimization = Off

apc.report_autofilter = Off

apc.shm_segments = 1

apc.shm_size = 30

apc.slam_defense = 0

apc.stat = On

apc.ttl = 0

apc.user_entries_hint = 100

apc.user_ttl = 0

apc.write_lock = On

For a full explanation of these settings, see

For a general Moodle installation several changes are needed. These are:

The apc.shm_size (the size of the cache) which should be set initially to 64Mb.

The apc.shm_segments which should be set to 1. This gives a total initial cache size of 64Mb.

The apc.stat (file stating) which should be set to 1 otherwise you may get blank pages.

The apc.max_file_size setting which should be increased to 10Mb.

Note that to disable APC temporarily set apc.enabled = 0 in PHP.INI and restart your webserver.

A working APC section of of PHP.INI is shown below, so copy and paste the following at the end of your PHP.INI file:


apc.enabled = 1

apc.shm_segments = 1

apc.shm_size = 64

apc.max_file_size = 10M


The remainder of the settings can be left as their default.

Set the temp directory

APC needs a temporary directory to save its files. It will attempt to save the files in the windows temp directory, so set the C:\WINDOWS\TEMP directory to be writable by the web server user (for IIS this is IUSR_machine-name, for Apache no change to permissions are necessary), e.g. at least Read & Execute permissions.

Monitoring and tuning the cache

The APC source contains a php script that is useful for monitoring and tuning the performance of your cache.

Download the APC monitoring file from and extract the contents.

Look for the file apc.php as this is the file that displays APC monitoring information.

Save the file apc.php into the /moodle/admin folder on your server.

Note: Once you have successfully installed APC, move this file to a password protected area for security.

Verify that the script is working by browsing to (or whatever the location of the apc.php file is on your server). You should see a graphical display of your cache with some statistical data on the left side.

To tune the cache, look at the General Cache Information and Detailed Memory Usage and Fragmentation sections. Watch the Cache Full Count and Fragmentation % indicators.

If Cache Full Count > 0, this indicates that the cache is filling-up and churning as there is not enough memory allocated. To solve this problem increase the memory allocation (apc.shm_size).

The Fragmentation % indicator should be 0% but may increase from time-to-time especially if the cache is churning.

Checking performance

To confirm that there has been an improvement in performance, try the following:

Disable the cache in PHP.INI and restart the web server.

Run ab.exe (included in the apache bin folder) at the command prompt as follows:

c:\apache2\bin>ab.exe -n 50 -c 1 -d

Note the transfer rate and the time per request values.

Enable the cache in PHP.INI and restart the web server.

Load in your browser so that it is stored in the cache.

Run ab.exe again and compare the transfer rate and time per request values. You should see an increase in both of these values by approximately 50%.

Uninstalling APC

To uninstall APC, add a semicolon to the extension line in your PHP.INI as follows:

;extension = php_apc.dll

Remember to restart your web server.

See also

A discussion of an alternative to APC - Xcache

APC technical notes

No comments: