Biggest APC Configuration mistake

I’ve searched for Best APC Configuration on the net and applied it to my server. But later on I’ve stumbled to a problem. My Virtual server started getting slower.

Best APC Configuration

I’ve stumbled to the article by Greg Rickaby titled The Perfect APC Configuration which worked very good for me.

ADVERTISEMENT

Here is my APC configuration:

apc.enabled=1
apc.shm_segments=1

;32M per WordPress install
apc.shm_size=256

;Relative to the number of cached files (you may need to watch your stats for a day or two to find out a good number)
apc.num_files_hint=7000

;Relative to the size of WordPress
apc.user_entries_hint=4096

;The number of seconds a cache entry is allowed to idle in a slot before APC dumps the cache
apc.ttl=7200
apc.user_ttl=7200
apc.gc_ttl=3600

;Setting this to 0 will give you the best performance, as APC will
;not have to check the IO for changes. However, you must clear 
;the APC cache to recompile already cached files. If you are still
;developing, updating your site daily in WP-ADMIN, and running W3TC
;set this to 1
apc.stat=1

;This MUST be 0, WP can have errors otherwise!
apc.include_once_override=0

;Only set to 1 while debugging
apc.enable_cli=0

;Allow 2 seconds after a file is created before it is cached to prevent users from seeing half-written/weird pages
apc.file_update_protection=2

;Leave at 2M or lower. WordPress does't have any file sizes close to 2M
apc.max_file_size=2M

apc.cache_by_default=1
apc.use_request_time=1
apc.slam_defense=0
apc.mmap_file_mask=/tmp/apc/apc.XXXXXX
apc.stat_ctime=0
apc.canonicalize=1
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.lazy_classes=0
apc.lazy_functions=0

There are just a few modifications to the APC configuration from the one that Greg’s posted.

Changed the APC size to 256MB and removed the M at the end because my version of APC was crashing with it: apc.shm_size=256

And now the biggest problem, I’ve changed the mmap file mask to /tmp/apc folder apc.mmap_file_mask=/tmp/apc/apc.XXXXXX

Also there are some suggestions that apc.stat should be set to 0 on production servers, but as explained there are some suggestions from W3TC and also i had problems logging in on the OpenX admin interface. I have mine set to enabled 1.

Why there is a problem

When running Virtual Machines your biggest problem will be disk IO, so running cache on disk is not a good idea.

After installing APC on my machine I’ve noticed high disk usage under load. Using iotop showed disk usage by [flush-8:0] and my Apache user which directed me to the problem.

Solving the problem

I’ve moved apc.shm_size to a tmpfs 

mkdir /tmp/apc

Edit your /etc/fstab file

vi /etc/fstab

Append the following

tmpfs /tmp/apc tmpfs size=256M 0 0

Mount the partition

mount /tmp/apc

With this I’ve alocated 256MB of RAM to be used for APC Memory Mapping. After this changes the Disk IO was back to normal and the website load was amazing.

If you have any suggestions let me know. But for now this configuration works for me.