После отключения 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?
Имеем веб-сервер на 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?
Похожие публикации
Уважаемые хостеры, помогите!
Технический вопрос по хостингу для форума
Как такое может быть? Сервер недоступен, но не для всех.
Фильтр сервер
Подскажите хочтинг для Wordpress
Нет комментариев