Пытался разобраться в этом на нескольких форумах. Надеюсь, я смогу уточнить здесь:
Вот стек, с которым я работаю: Red Hat Enterprise Linux Server версии 5.6 (Tikanga) Liferay 6.0.6 на Glassfish 3.0.1 MySQL 5.0.77 Apache 2.2.3
Портал Liferay предоставляет конечным пользователям множество портлетов. Статический контент (веб-страницы), статические ресурсы (в основном файлы pdf и mp3 размером 1–80 МБ), возможности загрузки и скачивания файлов (в основном файлы mp3 размером 40-60 МБ) и потоковая передача этих файлов MP3 в режиме онлайн.
Вот странный опыт конечного пользователя: При нормальной нагрузке: (20-30) пользователей загружают, скачивают или транслируют файлы и 20-30 получают доступ к статическому контенту (некоторые из них загружаются), мы видим следующее:
1) Щелчок по ссылке запускает загрузку части MP3 (длина этой части составляет несколько секунд).
2) Щелчок по ссылке вызывает загрузку содержимого страницы, а не рендеринг.
3) При нажатии на ссылку страница отправляет конечному пользователю двоичные данные, а не ожидаемый контент.
4) Щелчок по ссылке возвращает текст файла javascript, а не отображает страницу.
Каждый случай полностью случайен (или кажется таковым). Иногда это работает, иногда нет. Похоже, не имеет отношения к браузеру или клиентской ОС. Странные события, кажется, происходят гораздо чаще при использовании SSL-соединения, а не обычного http.
Apache служит только прокси-сервером (наоборот). Он в основном передает все запросы в Glassfish. Apache не обслуживает прокси статического содержимого.
Мы перестроили весь стек с нуля и повторно развернули войны портлетов, но проблемы остались прежними. Liferay работает как единый сервер (не кластерный). Мы отключили mod_cache в Apache. Проблемы становятся более частыми по мере роста нагрузки на сервер. Сегодня утром нагрузка довольно мала, и мы наблюдаем несколько проблем, но использование сайта будет расти, особенно сегодня вечером с 9 вечера по центральному поясному времени до утра среды. Вы можете попробовать сайт (http://preview.bsfinternational.org) в то время, и я ожидал, что вы можете столкнуться с одной из странностей, когда вы случайным образом нажимаете ссылки на сайте (https вызывается только при входе в систему). Опять же, https, похоже, усугубляет проблему.
Это очень похоже на проблему с кешированием, но я не знаю, где в стеке начинать чистку лука. Апач? Liferay? Стеклянная рыба? MySQL? Может, даже Redhat? Мы в тупике, и большинство форумов, на которых мы публиковали (LifeRay и Glassfish), вернули очень мало предложений. Мне просто нужно понять, с чего начать. Я понимаю, что у нас может быть портлет
РЕДАКТИРОВАТЬ: открывая файлы в шестнадцатеричном редакторе, которые выглядят как страницы, которые загружаются, а не отображаются, мы видим, что первые 4000 символов являются «мусором», а затем виден «нормальный» заголовок «HTTP / 1.1 ....». Итак, что-то сбрасывает беспорядок символов до смещения 4000 (при просмотре в шестнадцатеричном редакторе). Может, подсказка?
EDIT2: смещение 4000h составляет 16k (16384). Я думаю, что это проблема с кешем, но не знаю, где искать настройки кеша такого размера. Я вижу ссылки на буферы кэша LRU размером 16k в Apache, но я знаю, что Glassfish (или, возможно, Liferay) использует ehcache. ЭТО вызывает у кого-то какие-то мысли? Идеи?
Итак, вот ответ (не полный ответ, но, по крайней мере, решение). У нас был сторонний портлет, который принудительно использовал SSL-соединение для определенных URL-адресов, для которых в URL-адресе было \ secure. Мы удалили этот портлет, и проблема исчезла.
Когда у меня появится возможность изучить код, я смогу выяснить, что в портлете вызывает проблему. Но мы работали без проблем в течение пары недель, и портлет определенно был причиной (AFAIK).
Ключ к выяснению того, где находится ваша проблема, - это удалить различные части из уравнения или перехватить трафик там, где вы не можете.
Например.:
Поскольку проблема, скорее всего, связана с HTTP (генерирование незаконных HTTP-ответов), я ожидаю, что база данных будет исключена как причина.
И несколько менее технических предложений:
Другой общий подход к такого рода проблеме - попросить кого-то еще взглянуть, а вы не рассказывать им, что вы уже сделали - просто сядьте и позвольте ему объяснить, на что они смотрят, может быть, вы найдете что-то, чего еще не было. приходит вам в голову или что вы не проверяли раньше.
И, чтобы подшутить над своим разумом: используйте другой компьютер или стол для проведения тестирования: изменение физического ракурса для наблюдения за системой иногда является хорошим поводом для разных мыслей. Звучит глупо, но иногда мозг хочет, чтобы его обманули.