PHP: APC Configuration and Usage Tips and Tricks

PHP APC (Alternative PHP Cache / Opcode Cache) is framework that optimizes PHP intermediate code and caches data and compiled code from the PHP bytecode compiler in shared memory. APC Opcode Cache is quickly becoming the de-facto standard PHP caching mechanism.

PHP APC installation is very easy, example with Fedora / CentOS / Red Hat (RHEL) you can check following guides to see howto install it:
Install Nginx/PHP-FPM on Fedora/CentOS/Red Hat (RHEL)
Install Apache/PHP on Fedora/CentOS/Red Hat (RHEL)

This PHP APC guide is divided on four different section:
1. PHP APC Configuration
2. Enable PHP APC Statistics
3. Howto Use PHP APC User Cache
4. PHP APC Performance Testing

1. PHP APC Configuration

1.1 Find Your apc.ini File

updatedb
 
locate apc.ini

Example location on Fedora/CentOS/RHEL /etc/php.d/apc.ini. You can use apc.ini as base and check following most important / all options.

1.2 PHP APC Most Important Configurations

Enable APC Module

extension = apc.so

Enable/Disable PHP APC

apc.enabled=1

APC Number of Shared Memory Segments

If APC is configured with mmap it only uses 1 shm_segment, then you could remove apc.shm_segments or use following:

apc.shm_segments=1

APC Size of Each Shared Memory Segments

If you use just one memory segment, then set this value to total memory what you want to use. This value depends on available RAM size and required cache size. So first this could be example 128 Mb and when you see real usage then it’s easy to increase on decrease this limit.

apc.shm_size=128M
 
## just large memory example ##
apc.shm_size=2G

APC Cache Entries Time to Live (ttl)

Normal configuration it’s good to set some ttl (time to live) value for cache entries. This is number of seconds how long cache entry is allowed to idle in a slot in case this cache entry slot is needed by another entry. This possible to set 0 (zero), but when cache is full then new items can’t be added, so I recommend some other value. PHP APC have two different ttl values one for cache entries apc.ttl (for php files) and apc.user_ttl (for user entries). Also own value for cache garbage-collection apc.gc_ttl. Following is just example setup:

## PHP file cache 1 hour ##
apc.ttl=3600
 
## User cache 2 hour ##
apc.user_ttl=7200
 
## Garbage collection 1 hour ##
apc.gc_ttl=3600

Max File Size on APC Cache

Normally it’s wise cache only “small” files and this value is good to set example to default 1 Mb.

apc.max_file_size=1M

APC Stat (Check) the script if it has been modified

This apc.stat could be powerful and dangerous option. Default value on, which force APC to stat (check) the script on each request to determine if it has been modified. In some cases, if you have files that are rarely modified, or if the project contains “too many” included files (per page load), such as a monstrous e-commerce project, then it’s very good to disable apc.stat. If you disable apc.stat then cache should be cleared every time you modified files.

## Normally set ##
apc.stat=1
 
## Or if you know what you're doing then set ##
apc.stat=0

1.3 Restart Your Web Server

When your configuration is done then just restart your web server and you have APC (Alternative PHP Cache) enabled on all PHP requests.

This PHP APC guide is divided on four different section:
1. PHP APC Configuration
2. Enable PHP APC Statistics
3. Howto Use PHP APC User Cache
4. PHP APC Performance Testing

Pages: 1 2 3 4

Follow If Not True Then False Updates!

Pages: 1 2 3 4

11 Comments

  1. The best thing with learning PHP programming is having a lot of people who are always willing to share their knowledge. One of the best tips on APC configuration is this one that you have made.

  2. I disagree with this:
    “Normally it’s wise cache only “small” files and this value is good to set example to default 1 Mb.”
    Why did you say that? Caching large files is also good because you are avoiding parsing these files.
    Anyway thanks for the tips :)

    • Hi Luis,

      Some cases it might be good increase apc.max_file_size value. But…

      Let’s think very normal example, VPS servers (512Mb, 1Gb, 2Gb) where you have to limit amount of APC memory (e.g. 32Mb, 64Mb 128Mb, 256Mb), and you have hundreds of files, a lot of small files (less than 1Mb) and a few large files (like 25Mb).

      Okay, you cache all files ignoring the size (set very high apc.max_file_size value), then the cache will reach maximum capacity almost constantly and it clean forcefully any entries that haven’t been accessed in the last apc.ttl seconds. This is situation where you use APC, but finally your scripts are loading much slower than without any cache, because you end up the situation where load files from disk, add files to cache and delete files from cache. Which is much heavier than just load files from disk.

      The optimal situation is a situation where your cache is almost fully used, but newer reach maximum capacity (Cache full count number is always zero) and almost all incoming requests are hits (not misses).

      But, if you have enough memory to get all your files cached, then it’s okay to set very high apc.max_file_size and cache everything. :)

  3. I installed APC on a Debian server using apt-get.

    I can’t find the apc.php file in the location you mentioned where else is this file located ?

    • Hi A.Jesin,

      On Debian check /usr/share/doc/php-apc/ path or try following (as root):

      updatedb
       
      locate apc.php
  4. Hello JR,

    I tried everything and still I couldn’t find apc.php. I even tried

    find / -name apc.php

    So finally I downloaded the APC archive from PECL’s website and used the apc.php from it.

    I have uploaded a copy of it to my blog at http://jesin.tk/apc-php-download/ for people who have installed it from the repository.

    • Hi again A.Jesin,

      Strange that Debian doesn’t include apc.php at all, but nice to hear that you got it working and even write helpful post to other Debian users who can’t get apc.php file from Debian’s on pakcages. Thanks!

      • It’s in /etc/php5/conf.d/20-apc.ini

        • Thanks Henrik!

  5. Hi. I am coming from windows and am on fedora 18. What do I use for domain-name here? domainname command states there is no domain name set. i.e. none

    • Hi Chandan Pednekar,

      Do you mean APC statistics url?

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackbacks/Pingbacks

  1. Install Apache/PHP 5.4.6 on Fedora 17/16, CentOS/RHEL 6.3/5.8 - [...] More info about PHP APC from PHP APC Configuration and Usage Tips and Tricks. [...]
  2. Install Nginx/PHP-FPM on Fedora 17/16, CentOS/RHEL 6.3/5.8 - [...] More info about PHP APC from PHP APC Configuration and Usage Tips and Tricks [...]

Pages: 1 2 3 4