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.
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
Edit your /etc/fstab file
Append the following
tmpfs /tmp/apc tmpfs size=256M 0 0
Mount the partition
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.