Я получаю кучу ошибок 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 здесь:
Это дикая догадка, но проверили ли вы, сколько временных таблиц на диске создает 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.