Мониторинг и настройка производительности сервера приложений Oracle (высокая загрузка ЦП)
Я только что устроился на работу в компанию, и мой босс дал мне проблему с производительностью, которую нужно решить как можно скорее. У меня нет опыта работы с Java EE на стороне сервера.
Позвольте мне начать с того, что я узнал о системе и все еще не смог найти решение:
У нас есть сервер приложений Oracle (10.1.) и сервер базы данных Oracle (9.2.), программисты написали своего рода большой проект J2EE (проект X), используя конкретно JSF 1.2 с Ajax, который используется только в этом проекте. Они активно используют PL/SQL в своем коде.
Итак, мы запустили сервер приложений (машина Solaris), все вроде бы в порядке. Пользователи начали использовать приложение с понедельника из разных мест (у 200 приложений есть учетные записи пользователей, я только что проверил и вижу, что пул подключений настроен правильно, сеанс активен только 15 минут).
Через некоторое время (2 дня) загрузка ЦП становится высокой, %60,ночью все то же самоеничего не изменилось (на данный момент количество пользователей онлайн составляет около 1 или 2), дажеон начинает использовать процессор, выделенный для других приложений на том же сервере, потому что они освободились Если мы не перезапустим сервер, загрузка достигнет 90% через 2 дня, приложение будет работать настолько медленно, что конечные пользователи начнут звонить.
Основная проблема заключается в том, что инженеры-программисты утверждают, что код понятен, а системные менеджеры и администраторы баз данных говорят, что у нас правильная конфигурация, а другие приложения работают нормально. Почему эта проблема возникает только для приложения X?
Я начинаю копировать базу данных на тестовую платформу и обновляю ее до последней версии, также сделал то же самое с сервером приложений (Weblogic), если есть ошибка или нет. Я тестировал только сам, только одного пользователя и панель администратора Weblogic, я могу отслеживать потоки и сбрасывать их. Я заметил, что некоторые потоки отображаются каккоробление. когда я проверил руководства и проконтролировал трассировку, я увидел, что она указывает мне номер строки, где код PL/SQL вызывается из файла .java. Инженер по программному обеспечению говорит, что да, у нас действительно сложные коды PL/SQL, нокакова связь с сервером приложений?это проблема сервера БД, я думаю, они правы...
Я знаю, что в этом вопросе много пробелов, и мне бы хотелось дать более подробную информацию, но я ценю то, как вы меня направляете.
Заранее спасибо ...
Редактировать: На сервере достаточно как процессора, так и памяти для запуска более сложных приложений.
решение1
Тяжелые вызовы PL/SQL должны блокировать поток, поэтому загрузка ЦП должна снизиться.
Моим первым шагом в случае медленного сервера приложений является проверка журналов gc в поисках частых крупных сборок (которые указывают либо на утечку памяти, либо на то, что JVM просто требуется больше памяти).
Системы, за которыми я присматриваю, сталимногоболее стабильной после перехода с толстых драйверов Oracle на облегченные драйверы jdbc, хотя проблемы в основном проявлялись в сбое контейнера.
Журналы должны быть хорошим индикатором любых проблем в системе, но многое зависит от того, что разработчики решат туда записать. Медленный SQL может привести к исчерпанию пула подключений — убедитесь, что пул регистрирует статистику подключений. Также убедитесь, что ulimit установлен правильно для JVM.
Поскольку вы используете 9i на уровне БД, у вас не будет функциональности AWR — вам придется запустить statspack (но это уже должно быть стандартной практикой для управления производительностью вашего сайта), чтобы определить причину проблем в БД.
Постепенное снижение производительности указывает на утечку памяти в приложении - обычно это вызвано тем, что объекты не разыменованы и, следовательно, не подлежат сборке мусора - т.е. проблема программирования. Это должно быть очевидно из большинства инструментов профилирования Java.
Я заметил, что некоторые темы отображаются как перегруженные
Если вы не тестируете это с реалистичной рабочей нагрузкой, результаты будут практически бесполезны.