Висячие страницы загружаются каждые n загрузок

Недавно я переместил свой сайт на новый сервер (Apache 2, PHP5, MySQL5). Сайт является форумом Invision. Каждые несколько постов / тем он просто висит. Данные были записаны, потому что, если вы остановитесь и перезагрузите, сообщение / поток там. Сначала я думал, что это проблема с записью, но нет. Данные записываются, но загрузка страницы никогда не завершается. Он не покидает страницу, где были введены данные.

Каков наилучший способ устранения этой проблемы? Единственное, что я сделал в последнее время, - это уменьшил время ожидания MySQL, но я не вижу в этом проблемы, так как значения все еще достаточно велики, и в журнале MySQL нет упоминаний о таймаутах. Для записи в журнале ошибок PHP тоже ничего нет.

РЕДАКТИРОВАТЬ: я проверил свой статус сервера. Все выглядело нормально, но у меня есть подозрение, что я ударил мой ServerLimit, поэтому я удвоил это. Также включены мои Keepalive. Будет следить за этим.

РЕДАКТИРОВАТЬ 2: это было несколько дней, и это все еще происходит. У меня есть больше информации, хотя;

  1. Apache генерирует ошибки seg, но включение дампов ядра не приводит к их возникновению.
  2. Я попытался отключить модули в Apache, но это просто мешает работе.
  3. Боюсь, это может быть связано с DNS. Если я смотрю Живые Заголовки в Firefox, абсолютно ничего не происходит в этот период "зависания". После этого ответы возвращаются довольно быстро.

ОБНОВЛЕНИЕ (05/04): Я собрал последние версии Apache и PHP из исходного кода, не повезло. Затем я удалил их и использовал remi repo, чтобы обновить все мои пакеты до последней стабильной версии. Сегфоуты, похоже, прекратились, но зависание продолжается.

ini на:

  • www.skylinesaustralia.com/php.ini
  • www.skylinesaustralia.com/my.cnf
  • www.skylinesaustralia.com/httpd.conf

ОБНОВЛЕНИЕ - РЕШЕНО! - Проблема в том, что в MySQL был гигантский размер кеша запросов. Это было 2 ГБ, изменив его на 64M отсортировано.

8 ответов

Решение
  1. Апач выбрасывает ошибки сега

Там твоя проблема. Apache не зависает, ваш браузер зависает, когда ребенок apache умирает и не выполняет запрос.

Отладка LogLevel может дать вам немного больше информации (хотя тонны информации, если это занятая производственная система).

Мое первое предположение было бы suhosin / mod_security или что-то, что скомпилировано против неправильного php api или возможно с использованием общих библиотек, которые немного изменились. Я бы дважды проверил их, и если бы вы могли изолировать различные работающие расширения php / apache. Вы используете apcc, eaccelerator или какой-либо кэш кода операции? Zend? Source Guardian? IonCube? Вы используете правильную версию каждого из них? Последние обновления? В Zend 3.3.9, ioncube также недавно обновился и может вызывать ошибки в зависимости от используемой версии Zend.

Вот несколько советов, учитывая большое количество возможностей и небольшое количество деталей.

  1. Откройте файл конфигурации вашего форума, убедитесь, что хост подключения MySQL - localhost
  2. Откройте /etc/hosts и убедитесь, что у вас есть такая строка:127.0.0.1 localhost.localdomain localhost
  3. Выключите любой брандмауэр, который вы можете запустить.
  4. Выключите любой движок кеша MySQL, который у вас есть. (xcache, memcached, ...)
  5. Удалите пакет php-mysql и переустановите его (или принудительно переустановите).

Если ничего из этого не работает, пожалуйста, опубликуйте содержимое php.ini, httpd.conf и my.cnf.

Свяжите что-то вроде strace или gdb со всеми рабочими процессами apache и перезагрузите страницы в браузере, который один разломан. Тогда вы получите больше информации о том, что он делает, когда он падает.

Когда вы говорите, что вы включили coredumps, вы также позволили им быть достаточно большими для обработки coredump Apache? Вероятно, он будет довольно большим, поэтому даже временная установка их неограниченного размера может помочь.

Если вы используете Firefox, установите плагин Firebug. Включите его, щелкнув значок ошибки в правом нижнем углу браузера, а затем установите "Включить" на вкладке "Сеть". Загрузите страницу своего форума и проверьте на наличие ошибок.

Попробуйте остановить Apache, затем перезапустите его с помощью: strace /path/to/httpd -X (будет запущен только один рабочий, и Apache не отсоединится от консоли.) Воспроизведите зависание и проверьте вывод strace. Это должно локализовать, какая часть системы дает сбой.

Попробуйте уменьшить размер кэша запросов в MySql.

Я видел похожие проблемы, связанные с DNS, есть ли шанс, что вы разместите URL сайта?

РЕДАКТИРОВАТЬ: Только что вы уже упоминали, что запустить сайт через http://www.intodns.com/ это также может быть связано с именем хоста сервера. Как я уже сказал, если вы не против опубликовать домен, это может быть проще.

Есть большая вероятность, что это серьезная проблема с ОС серверов или аппаратного обеспечения.

Я бы попробовал сделать проверку ОС (Linux на основе Debian использует debsums, не уверен ни в чем другом).

Также попробуйте запустить memtestx86+ что должно подтвердить, что нет большой проблемы с памятью, они могут отображаться только под нагрузкой.

Другие вопросы по тегам