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

Как диагностировать частую «внутреннюю ошибку сервера 500» в Oracle Apex

У меня есть база данных Oracle 10g XE, работающая на OEL 5 на инстансе Amazon EC2. На нем я запустил общедоступный веб-сайт (на самом деле 2 веб-сайта), написанный на Oracle Application Express 4.0.1.

Большую часть года сайт в основном используется людьми, просто просматривающими информацию. Таким образом, он работает нормально - без ошибок, мало активности. Примерно в это время года (март-апрель), когда мы начинаем принимать заявки от людей в спортивную команду, я начинаю замечать частые ошибки, почти всегда при отправке экрана (например, экрана, который создает или обновляет запись).

Мне нужна помощь в поиске причины ошибки.

Фактическое сообщение об ошибке - это ошибка Apache «недопустимый ответ от вышестоящего сервера», что связано с тем, что у меня запущен Apache (порт 80) перед Apex - он Proxy передает запросы на / apex / на Apex (порт 8080). . Когда я получаю доступ к Apex напрямую через порт 8080, я получаю 500 Internal Server Error вместо. Журналы Apache показывают, что Apache также получает. Перед возвратом страницы с ошибкой всегда проходит 3-5 секунд.

Иногда (например, сейчас, когда я пытаюсь воспроизвести это) этого вообще не происходит. В других случаях (возможно, когда на нем работает несколько человек?) Потребуется 3-4 раза, прежде чем обновление будет принято. Когда это происходит, это происходит очень часто - то есть, возможно, только 1 из 10 запросов будет успешным с первой попытки.

Я видел, как это возникало в ряде различных приложений, а также в самом приложении для разработки и администрирования Apex. Проблема не ограничена каким-либо набором страниц, и я видел это, когда страница должна вставлять запись, обновлять запись, вызывать процедуру или даже просто переходить на другую страницу (хотя последняя бывает редко).

В журнал предупреждений ничего не добавляется. Я подумал, что это может быть проблема с пространством, но, похоже, во всех табличных пространствах достаточно свободного места. Я попытался перезапустить Apache и перезапустить базу данных без изменений. У меня кончились вещи, которые можно было бы просто «попробовать», и я хотел бы, если возможно, раз и навсегда выявить причину проблемы.

Об Oracle XE следует помнить одну важную вещь: он устанавливает строгие ограничения на использование оперативной памяти, использование пространства данных пользователя и использование процессора. Таким образом, любое приложение, которое пытается обслуживать несколько запросов, будет видеть тайм-ауты, если специально не закодировано для обработки этих ожиданий. Это может объяснить, почему вы видите, что он «зависает», но не получает сообщения в журналах предупреждений: все в порядке, система просто выполняет предыдущие задачи.

Я еще не знаю, является ли это ответом, но - во время недавнего сбоя в Amazon US-East я заметил, что получаю ORA-00018 maximum number of sessions exceeded при попытке подключиться к базе данных.

С тех пор я увеличил количество процессов (тем самым увеличив количество сессий). После отключения я заметил, что ошибка больше не повторялась.

ПРИМЕЧАНИЕ. В следующий раз, когда мы получим всплеск активности, я уменьшу этот параметр и посмотрю, не возникнет ли проблема снова - тогда я пойму, является ли это решением.