mirror of
https://github.com/php/doc-ru.git
synced 2026-04-23 23:38:07 +02:00
386 lines
18 KiB
XML
386 lines
18 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: ba990c472c6d032479ea12f062abde0b1d7a80a2 Maintainer: rjhdby Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<section xml:id="apcu.configuration" xmlns="http://docbook.org/ns/docbook">
|
|
&reftitle.runtime;
|
|
&extension.runtime;
|
|
<para>
|
|
Хотя настроек хранилища APCu по умолчанию достаточно для большинства задач, для
|
|
серьёзных проектов необходимо внимательно изучить следующие настройки.
|
|
</para>
|
|
<para>
|
|
При настройке APCu необходимо определиться, сколько памяти
|
|
предоставить в распоряжение APCu.
|
|
Директива ini-файла, которая отвечает за эту настройку — <literal>apc.shm_size</literal>.
|
|
Внимательно прочитайте нижеследующий раздел.
|
|
</para>
|
|
<para>
|
|
После запуска сервера скрипт <literal>apc.php</literal>, который поставляется вместе с модулем,
|
|
следует скопировать в docroot и просмотреть в браузере, поскольку он предоставляет
|
|
подробный анализ внутренней работы APCu.
|
|
Если в PHP включён модуль GD, он даже отобразит некоторые интересные графики.
|
|
</para>
|
|
<para>
|
|
Если APCu работает, число <literal>Cache full count</literal> (слева) покажет,
|
|
сколько раз кеш достигал максимальной ёмкости и был вынужден вытеснять записи,
|
|
чтобы освободить память.
|
|
Во время вытеснения, если указали значение <literal>apc.ttl</literal>,
|
|
хранилище APCu сначала попытается удалить записи с истёкшим сроком действия, т. е. записи,
|
|
TTL которых либо истёк, либо записи, у которых TTL не установлен
|
|
и к которым не было доступа в течение последних <literal>apc.ttl</literal> секунд.
|
|
Если значение <literal>apc.ttl</literal> не установили или удаление истёкших записей
|
|
не освободило достаточно места, APCu очистит весь кеш.
|
|
</para>
|
|
<para>
|
|
В хорошо настроенном кеше количество вытеснений должно быть минимальным.
|
|
Если кеш постоянно заполняется и, следовательно, принудительно освобождается,
|
|
то возня, которая возникает в результате этого, негативно скажется на производительности скрипта.
|
|
Самый простой способ минимизировать это число — выделить больше памяти для APCu.
|
|
</para>
|
|
<para>
|
|
Если APCu собрали с поддержкой mmap (Memory Mapping), оно будет использовать
|
|
только один сегмент памяти, если же наоборот, APCu собрали с поддержкой SHM (SysV Shared
|
|
Memory), оно будет использовать несколько сегментов. MMAP не имеет максимального
|
|
ограничения, в отличие от SHM, который ограничивается
|
|
<literal>/proc/sys/kernel/shmmax</literal>. Обычно рекомендуется использовать MMAP,
|
|
потому что он гораздо быстрее выделяет память при перезагрузке веб-сервера, что
|
|
сказывается на скорости запуска сервера.
|
|
</para>
|
|
<para>
|
|
<table>
|
|
<title>Опции конфигурации APCu</title>
|
|
<tgroup cols="4">
|
|
<thead>
|
|
<row>
|
|
<entry>&Name;</entry>
|
|
<entry>&Default;</entry>
|
|
<entry>&Changeable;</entry>
|
|
<entry>&Changelog;</entry>
|
|
</row>
|
|
</thead>
|
|
<tbody>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.enabled">apc.enabled</link></entry>
|
|
<entry>1</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.shm-segments">apc.shm_segments</link></entry>
|
|
<entry>1</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.shm-size">apc.shm_size</link></entry>
|
|
<entry>"32M"</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.entries-hint">apc.entries_hint</link></entry>
|
|
<entry>4096</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.ttl">apc.ttl</link></entry>
|
|
<entry>0</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.gc-ttl">apc.gc_ttl</link></entry>
|
|
<entry>3600</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.mmap-file-mask">apc.mmap_file_mask</link></entry>
|
|
<entry>NULL</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.slam-defense">apc.slam_defense</link></entry>
|
|
<entry>0</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.enable-cli">apc.enable_cli</link></entry>
|
|
<entry>0</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.use-request-time">apc.use_request_time</link></entry>
|
|
<entry>0</entry>
|
|
<entry><constant>INI_ALL</constant></entry>
|
|
<entry>До APCu 5.1.19 значение по умолчанию равнялось <literal>1</literal>.</entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.serializer">apc.serializer</link></entry>
|
|
<entry>"php"</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry>До APCu 5.1.19 значение по умолчанию равнялось <literal>"default"</literal>.</entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.coredump-unmap">apc.coredump_unmap</link></entry>
|
|
<entry>0</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
<row>
|
|
<entry><link linkend="ini.apcu.preload-path">apc.preload_path</link></entry>
|
|
<entry>NULL</entry>
|
|
<entry><constant>INI_SYSTEM</constant></entry>
|
|
<entry></entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
&ini.php.constants;
|
|
</para>
|
|
|
|
&ini.descriptions.title;
|
|
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry xml:id="ini.apcu.enabled">
|
|
<term>
|
|
<parameter>apc.enabled</parameter>
|
|
<type>bool</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Для опцпии <literal>apc.enabled</literal> устанавливают значение 0, чтобы отключить APC.
|
|
Это в первую очередь полезно, когда APC статически компилируется в PHP, поскольку нет другого способа
|
|
отключить его (при компиляции как DSO строку <literal>extension</literal>
|
|
в файле <literal>php.ini</literal> можно просто закомментировать).
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.shm-segments">
|
|
<term>
|
|
<parameter>apc.shm_segments</parameter>
|
|
<type>int</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Количество сегментов разделяемой памяти, которые выделили под кеш компилятора.
|
|
Если APC не хватает разделяемой памяти, но для опции
|
|
<literal>apc.shm_size</literal> установили настолько максимальное значение, насколько
|
|
разрешает система, увеличение этого значения может помешать APC исчерпать свою память.
|
|
система.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.shm-size">
|
|
<term>
|
|
<parameter>apc.shm_size</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Размер сегмента разделяемой памяти, заданный в короткой нотации (смотрите
|
|
<link linkend="faq.using.shorthandbytes">этот FAQ</link>).
|
|
По умолчанию, некоторые системы (включая большинство вариантов BSD)
|
|
ограничивают это значение крайне малым значением.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.entries-hint">
|
|
<term>
|
|
<parameter>apc.entries_hint</parameter>
|
|
<type>int</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Это подсказка о количестве уникальных пользовательских переменных,
|
|
которые надо кешировать. Установите равным нулю или вообще не
|
|
указывайте, если не уверены.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.ttl">
|
|
<term>
|
|
<parameter>apc.ttl</parameter>
|
|
<type>int</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Записи кеша без явного указания TTL считаются истёкшими,
|
|
если к ним не обращались в течение этого количества секунд.
|
|
По сути, это позволяет удалять такие записи оппортунистически
|
|
во время добавления кеша или перед полным удалением.
|
|
Обратите внимание, что поскольку удаление происходит по обстоятельствам,
|
|
записи могут быть доступны для чтения, даже если их срок жизни
|
|
превышает <literal>apc.ttl</literal> секунд.
|
|
Параметр не влияет на записи кеша, для которых явно задан TTL.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.gc-ttl">
|
|
<term>
|
|
<parameter>apc.gc_ttl</parameter>
|
|
<type>int</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Количество секунд, которые запись может находиться в
|
|
списке сборщика мусора. Это значение обеспечивает
|
|
безотказность в случае падения сервера в момент
|
|
исполнения закешированного файла.
|
|
Если исполняемый файл был изменён, память, выделенная
|
|
под кеширование его старой версии, не будет
|
|
возвращена до истечения этого времени.
|
|
Установка в ноль отключает этот функционал.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.mmap-file-mask">
|
|
<term>
|
|
<parameter>apc.mmap_file_mask</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Если собран с поддержкой MMAP через опцию <literal>--enable-mmap</literal>,
|
|
этот параметр должен содержать файловую маску типа mktemp-style для
|
|
передачи в модуль MMAP, чтобы определить, будет ли MMAP использовать
|
|
файловую систему или разделяемую память.
|
|
Для файловой системы опцию устанавливают так: <literal>/tmp/apc.XXXXXX</literal>
|
|
(ровно 6 <literal>X</literal>).
|
|
Чтобы использовать shm_open/mmap в стиле POSIX, в любом месте маски
|
|
добавляют <literal>.shm</literal>, например: <literal>/apc.shm.XXXXXX</literal>.
|
|
Чтобы использовать для анонимной памяти mmap интерфейс <literal>/dev/zero</literal>, который входит в ядро,
|
|
для опции устанавливают значение <literal>/dev/zero</literal>.
|
|
Если опцию оставили неопределённой, mmap будет анонимным.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.slam-defense">
|
|
<term>
|
|
<parameter>apc.slam_defense</parameter>
|
|
<type>bool</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
На очень загруженных серверах всякий раз, когда запускается веб-сервер
|
|
или изменяются файлы, запускается гонка из множества процессов, которые
|
|
попытаются закешировать один и тот же файл одновременно.
|
|
Установка для опции <literal>apc.slam_defense</literal> значения <literal>1</literal>
|
|
помогает предотвратить одновременное кеширование
|
|
процессами одного и того же файла за счёт введения вероятностного
|
|
механизма. Если разные процессы пытаются кешировать один и тот же ключ
|
|
в течение короткого периода времени, кеширование
|
|
для текущего процесса пропускается, чтобы уменьшить потенциальные
|
|
сбои в кеше.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.enable-cli">
|
|
<term>
|
|
<parameter>apc.enable_cli</parameter>
|
|
<type>int</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Больше для тестирования и отладки. Эта настройка включает APCu
|
|
для CLI версии PHP. При обычной работе, запускать APCu, который
|
|
будет создавать, наполнять и уничтожать кеш при каждом запуске
|
|
сценария в консоли, будет далеко не лучшей идеей. Но в целях
|
|
тестирования и отладки, можно легко включить APCu для CLI.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.serializer">
|
|
<term>
|
|
<parameter>apc.serializer</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Указывает APC использовать сторонний сериализатор.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.coredump-unmap">
|
|
<term>
|
|
<parameter>apc.coredump_unmap</parameter>
|
|
<type>bool</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Разрешает APC перехватывать сигналы, такие как SIGSEGV, который записывает
|
|
coredump, когда подан. Когда эти сигналы будут получены, APC попытается
|
|
освободить всю разделяемую память, чтобы не включать её в coredump. Эта
|
|
настройка может увеличить стабильность системы, когда критический сигнал был получен,
|
|
а APC сконфигурирован на использование большого объёма памяти.
|
|
</para>
|
|
<warning>
|
|
<para>
|
|
Эта возможность потенциально опасна. Освобождение сегментов разделяемой
|
|
памяти при получении критического сигнала может привести к непредсказуемому
|
|
поведению.
|
|
</para>
|
|
</warning>
|
|
<note>
|
|
<para>
|
|
Хотя некоторые ядра предоставляют возможность игнорировать некоторые
|
|
сегменты разделяемой памяти при записи core-файла, эти реализации
|
|
могут также игнорировать важные сегменты памяти, такие как Apache scoreboard.
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry xml:id="ini.apcu.preload-path">
|
|
<term>
|
|
<parameter>apc.preload_path</parameter>
|
|
<type>string</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Опционально. Задаёт путь, который используется APC для загрузки кешированных данных
|
|
во время запуска.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry xml:id="ini.apcu.use-request-time">
|
|
<term>
|
|
<parameter>apc.use_request_time</parameter>
|
|
<type>bool</type>
|
|
</term>
|
|
<listitem>
|
|
<para>
|
|
Использовать время старта запроса <acronym>SAPI</acronym> для
|
|
<acronym>TTL</acronym>.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</section>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|