Назад | Перейти на главную страницу

Кэширует ли Linux, Apache HTTPD или PHP файлы, к которым часто / недавно обращались?

Допустим, у нас есть простой index.php файл, который идет:

<?php
    inclde('file1.php');
    inclde('file2.php');
    inclde('file3.php');

Предположительно, это в конечном итоге приведет к трем дополнительным отдельным запросам ввода-вывода к диску, помимо index.php когда файл обслуживается.

Теперь предположим, что этот файл размещен на веб-сайте и часто запрашивается. Было бы разумно, если бы эти файлы каким-то образом кэшировались в памяти, а не отправляли запросы ввода-вывода каждый раз, когда кто-то посещает веб-сайт.

Вопросы:

  1. Имеет ли Apache httpd cache index.php?
  2. А как насчет 3 include() операции?
  3. Запрашивает ли PHP файлы из ОС через Apache? Имеет ли значение, какая модель mpm используется?
  4. Кеширует ли nginx, lighttpd или другие веб-серверы?
  5. Это тоже зависит от файловой системы ОС? т.е. будут ли ОС Linux кэшировать файлы, к которым часто обращаются?
  6. Или есть кеширование еще более низкого уровня?
  7. Или PHP или любой другой движок серверных приложений каким-то образом кэширует файлы, а запросы ввода-вывода никогда не поступают в ОС?

Поскольку дисковый ввод-вывод обычно является самым большим узким местом, знание того, как файлы кэшируются на различных уровнях веб-сервером, может помочь в настройке производительности и даже в разработке приложений, например возможно, объединение коротких файлов приложения, а не нескольких, позволяет повысить производительность.

Спасибо за помощь!

Да, если у него достаточно оперативной памяти, файловая система Linux будет кэшировать эти файлы. Все остальные уровни полагаются на кеш FS.

Могут быть более высокие уровни кеширования, которые кэшируют сгенерированный вывод сайта, но это должно быть специально настроено с помощью соответствующего модуля, такого как APC.

ОС имеет кеш файловой системы, который кэширует запросы чтения / записи к реальному аппаратному устройству.

Затем к конкретным вопросам:

  1. Apache не кэширует.
  2. Функции include () не выполняют кеширование в установках PHP по умолчанию. Если вы установите кеш OPCode, например APC, Xcache или OPCache, он будет кэшировать скомпилированные версии кода в памяти.
  3. Доступ к файловой системе осуществляется через вызовы файловой системы ОС.
  4. В их кешировании нет никакой пользы, поэтому они не делают этого. Кеша файловой системы достаточно для статического кэширования файлов, а любые динамические языки имеют лучшие варианты кэширования.
  5. Уровень Linux VFS выполняет кэширование, поэтому файловые системы не выполняют его.
  6. Сами жесткие диски также имеют некоторое кэширование, но на этом уровне выгода не так велика, потому что он не содержит никакой информации о структуре данных, которая полезна для кэширования.
  7. Да, с правильным кешем OPcode, упомянутым в ответе №2.