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

Ошибки apache сайта Drupal с высокой посещаемостью

Я получаю кучу ошибок apache, которые мне сложно отследить. Они находятся в системе RHEL, на которой работает очень объемный веб-сайт Drupal.

[Mon Sep 14 12:48:44 2009] [info] [client xx.xx.xxx.xx] (70007)The timeout specified has expired: core_output_filter: writing data to the network
[Mon Sep 14 12:50:19 2009] [info] [client xx.xxx.xx.xx] (104)Connection reset by peer: core_output_filter: writing data to the network
[Mon Sep 14 12:51:28 2009] [info] [client xx.xxx.xx.xx] (32)Broken pipe: core_output_filter: writing data to the network

Иногда (каждые 24–36 часов) происходит скачок нагрузки, и сайт полностью перестает отвечать на запросы. Средняя нагрузка возрастает с 1–1,5 до 200. Большинство запущенных процессов httpd будут отображаться как «D» (тупиковый), и единственный способ заставить сервер вернуться в «интерактивный» режим - это три -палец-салют или подождите, пока не получите подсказку и killall -9 httpd.

Очевидно, что сайт не может быть отключен для меня, чтобы я выполнял кучу strace работы. Я проверил конфигурацию apache и (снова), насколько я могу судить, EnableMMAP и EnableSendFile отключены. Файлы находятся на монтировании NFS v3, но ни сервер NFS, ни сервер mysql, ни что-либо еще не сообщает об ошибках. Ничего подходящего в системном журнале или dmesg. Сайт также слишком загружен, чтобы согласовывать отдельные запросы с ошибками, вызванными ими.

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

Короче говоря, в вашей конфигурации apache попробуйте следующее:

EnableMMAP Выкл.

Отправить файл выключен

В долгом:

Apache, очевидно, файлы mmaps и пытается использовать файл sendfile linux (http://linux.die.net/man/2/sendfile) для повышения производительности, когда он доступен, однако, согласно документам apache, это может вызвать проблемы со стабильностью в сетевых файловых системах, если он не может прочитать файл, см.

http://httpd.apache.org/docs/2.0/mod/core.html#enablesendfile

Здесь приводится конкретная информация по этому поводу:

http://httpd.apache.org/docs/2.0/faq/all_in_one.html#error.sendfile

Вы можете найти информацию о директивах EnableMMAP и EnableSendfile здесь:

http://httpd.apache.org/docs/2.0/mod/core.html#enablemmap

Это дикая догадка, но проверили ли вы, сколько временных таблиц на диске создает Drupal?

Я видел, что это вызывает проблемы с iowait (загрузкой).

mysqladmin -u root -p ext -ri 30 | grep Created_tmp_disk

Первый запуск покажет вам, сколько временных таблиц на диске было создано с момента последнего перезапуска MySQL. Затем он сообщит вам, сколько из них создано в 30-секундном временном окне (пока вы не выйдете из него с помощью Control-C).

Решение (временное) - поместить MySQL tmpdir в файловую систему на основе RAM (например, tmpfs).

Я предполагаю, что это запустит каскад, а сообщения, которые вы видите, - это просто разорванные соединения.

Ура

Нам удалось сбалансировать сайт, переключившись на InnoDB по всем направлениям и правильно настроив ключевой кеш, а также добавив кучу memcache и прочего. Все ошибки, которые я цитировал выше, по-видимому, были вызваны отменой клиентами запросов на длительные процессы, потому что, как только мы настроили базу данных, ошибки исчезли.

добавьте nginx для прокси-сервера вашего apache и напрямую обслуживайте статический контент. или даже полностью заменить apache. это очень сильно снизит нагрузку на apache.