Вопрос или проблема
Я использую общую файловую систему, и вызовы mmap() вызывают некоторые проблемы, я установил:
~# grep -i "mmap\|sendfile" /etc/httpd/conf/httpd.conf
EnableMMAP Off
EnableSendfile Off
и остановил/запустил apache, чтобы завершить существующие потоки, но я все еще вижу вызовы mmap() в strace:
~# for pid in $(pidof httpd); do strace -tt -T -ff -o trace-$pid -p $pid & done
~# grep 'mmap(' ./trace-23187* | wc -l
мой файл конфигурации является активным, и его версия 2.4.43
~# httpd -t
Syntax OK
~# httpd -t -D DUMP_INCLUDES | head
Included configuration files:
(*) /etc/httpd/conf/httpd.conf
~# httpd -v
Server version: Apache/2.4.43 (centos)
Server built: Jun 15 2020 12:10:08
Я не уверен, что проверять дальше, любые рекомендации приветствуются.
Ответ или решение
Ваша ситуация связана с вызовами mmap()
при работе Apache на версии 2.4.43, даже после того, как вы установили опцию EnableMMAP Off
в конфигурационном файле. Эта проблема может вызывать различные неудобства, особенно в среде с общими файловыми системами. Давайте разберёмся, почему это может происходить и какие шаги следует предпринять для её решения.
Теория
В Apache опции EnableMMAP Off
и EnableSendfile Off
традиционно используются для отключения механизмов оптимизации ввода-вывода. Эти механизмы могут повышать производительность, но на системах с общей файловой системой могут вызвать различные проблемы, в том числе из-за специфических особенностей работы с файлами и синхронизации данных.
Включение EnableMMAP Off
должно запретить использование функции mmap()
для определённых типов файловых операций, а именно для работы с файлами на диске, используемых непосредственно через Apache. Однако стоит заметить, что данное указание не влияет на внутренние операции в самом ядре системы или сторонних модулях и библиотек, которые могут быть загружены и работать в пространстве Apache.
Пример
Вы проверили конфигурацию с помощью команд:
~# grep -i "mmap\|sendfile" /etc/httpd/conf/httpd.conf
EnableMMAP Off
EnableSendfile Off
~# httpd -t
Syntax OK
# httpd -t -D DUMP_INCLUDES | head
Included configuration files:
(*) /etc/httpd/conf/httpd.conf
~# httpd -v
Server version: Apache/2.4.43 (centos)
Все проверки показывают, что конфигурация активна и синтаксически корректна. Однако, при использовании strace
, вы продолжаете наблюдать вызовы mmap()
, что указывает на потенциальные проблемы, которые не связаны напрямую с указанной конфигурацией.
Применение
Вот несколько шагов, которые вы можете предпринять, чтобы разобраться в ситуации:
-
Аудит модулей и зависимостей:
Важно выяснить, какие модули загружены в Apache и не используют ли они напрямуюmmap()
. Попробуйте выполнить командуhttpd -M
, чтобы получить список загруженных модулей, и изучите документацию каждого из них. -
Проверка библиотек:
Некоторые сторонние библиотеки или модули, которые могут быть частью вашей веб-приложения, также могут использоватьmmap()
. Проверьте, нет ли их внутри кода приложения или среди установленных библиотек. -
Изучение других конфигураций:
Убедитесь, что в системе нет других конфигурационных файлов Apache, которые могут переопределять настройкиEnableMMAP
. Это может быть/etc/httpd/conf.d/*.conf
или другие файлы и папки. -
Анализ syscalls:
Используйтеstrace
не только наhttpd
, но и на других процессах, чтобы понять, не инициируют ли вызовыmmap()
другие компоненты системных приложений. -
Обновление Apache:
Поскольку ваша версия Apache (2.4.43) не самая свежая, возможно, проблема уже решена в последующих обновлениях. Рассмотрите возможность обновления до более новой версии Apache. -
Анализ кода приложения:
Некоторые вызовыmmap()
могут инициироваться непосредственно кодом вашего веб-приложения. Проведите аудит источников вашего кода для выявления таких вызовов. -
Использование контейнеров:
Если обстановка позволяет, рассмотрите возможность поместить ваше приложение в контейнер (например, Docker) для изоляции и более гибкой настройки окружения.
Надеюсь, выполнение этих шагов поможет более точно идентифицировать источник возникновения вызовов mmap()
в вашей системе и предпринять соответствующие меры для их устранения. В любом случае, важно учитывать, что такие тонкости могут потребовать много времени на диагностику, особенно если они обусловлены комплексным взаимодействием множества элементов системы.