После отключения APC на веб-сервере с LAMP сайты начали работать быстрее и разгрузился процессор. WTF?

Здравствуйте, коллеги и товарищи.

Имеем веб-сервер на CentOS 6.3 для хостинга ряда сайтов на Drupal (в основном, седьмой версии), куда накатан традиционный LAMP + nginx в роли обратного прокси. В качестве прекомпилера для PHP использовался APC. На сервере порядка 100 живых сайтов, высокой нагрузки — нет.

Большинство сайтов на веб-сервере появилось недавно, до этого было 5-6 сайтов и всё работало хорошо (с тем же самым APC). Но когда пришло много сайтов (при этом все новички — слабые, по 100 хостов в сутки) мы начали замечать периодические тормоза: один и тот же сайт загружался то нормально, то с затупом (и однозначно затуп воспроизвести не удавалось). Но когда сайты начали выстреливать нотисами типа Unable to allocate memory for pool… — виноватого нашли, им оказался APC (т.е., наверное, не он сам, а наши несовершенные дефолтные конфиги, но тем не менее).

Ситуация развивалась вот так:



Возня с настройками сводилась в основном к apc.shm_*, но ситуацию с нагрузкой на процессор — это не решало.

Полный конфиг на момент отключения был таков:

Конфигурация APC# cat /etc/php.d/apc.ini; Enable apc extension module extension = apc.so; Options for the APC module version >= 3.1.3; See www.php.net/manual/en/apc.configuration.php; This can be set to 0 to disable APC. apc.enabled=0; The number of shared memory segments to allocate for the compiler cache. apc.shm_segments=1; The size of each shared memory segment, with M/G suffixe apc.shm_size=6144M; A «hint» about the number of distinct source files that will be included or; requested on your web server. Set to zero or omit if you are not sure; apc.num_files_hint=2048; Just like num_files_hint, a «hint» about the number of distinct user cache; variables to store. Set to zero or omit if you are not sure; apc.user_entries_hint=4096; The number of seconds a cache entry is allowed to idle in a slot in case this; cache entry slot is needed by another entry. apc.ttl=28800; use the SAPI request start time for TTL apc.use_request_time=1; The number of seconds a user cache entry is allowed to idle in a slot in case; this cache entry slot is needed by another entry. apc.user_ttl=28800; The number of seconds that a cache entry may remain on the garbage-collection list. apc.gc_ttl=3600; On by default, but can be set to off and used in conjunction with positive; apc.filters so that files are only cached if matched by a positive filter. apc.cache_by_default=1; A comma-separated list of POSIX extended regular expressions. apc.filters = "-(.*)\.tpl\.php$, -(.*)/apc\.php$"; The mktemp-style file_mask to pass to the mmap module apc.mmap_file_mask=/tmp/apc.XXXXXX; This file_update_protection setting puts a delay on caching brand new files. apc.file_update_protection=2; Setting this enables APC for the CLI version of PHP (Mostly for testing and debugging). apc.enable_cli=0; Prevents large files from being cached apc.max_file_size=1M; Whether to stat the main script file and the fullpath includes. apc.stat=1; Vertification with ctime will avoid problems caused by programs such as svn or rsync by making; sure inodes have not changed since the last stat. APC will normally only check mtime. apc.stat_ctime=0; Whether to canonicalize paths in stat=0 mode or fall back to stat behaviour apc.canonicalize=0; With write_lock enabled, only one process at a time will try to compile an; uncached script while the other processes will run uncached apc.write_lock=1; Logs any scripts that were automatically excluded from being cached due to early/late binding issues. apc.report_autofilter=0; RFC1867 File Upload Progress hook handler apc.rfc1867=0 apc.rfc1867_prefix =upload_ apc.rfc1867_name=APC_UPLOAD_PROGRESS apc.rfc1867_freq=0 apc.rfc1867_ttl=3600; Optimize include_once and require_once calls and avoid the expensive system calls used. apc.include_once_override=0 apc.lazy_classes=0 apc.lazy_functions=0; Enables APC handling of signals, such as SIGSEGV, that write core files when signaled.; APC will attempt to unmap the shared memory segment in order to exclude it from the core file apc.coredump_unmap=0; Records a md5 hash of files. apc.file_md5=0; not documented apc.preload_path

В итоге, APC деактивировали совсем. Пропали затупы сайтов, разгрузился процессор. «На глаз» мы не видим более медленной работы сайтов, а потому до выяснения обстоятельств оставили сервер совсем без акселератора.

Коллеги, поделитесь, пожалуйста, опытом по теме (можно и горьким тоже) и подскажите в какую сторону крутить конфиги APC?

Нет комментариев