У меня есть несколько устаревшее приложение Java EE, работающее на Sun Application Server 8.1 (он же SJSAS, предшественник Glassfish). При более чем 500 одновременных пользователях приложение становится неприемлемо медленным, и я пытаюсь помочь определить, где тратится большая часть времени выполнения и что можно сделать, чтобы ускорить его. До сих пор мы экспериментировали и измеряли с помощью LoadRunner, журналов сервера приложений, Oracle statpack, snoop, настраивали приемные и сеансовые (рабочие) потоки сервера приложений, настраивали размер пакета Hibernate и использование извлечения соединения и т. д., но после некоторых первоначальных успехов мы изо всех сил пытаемся улучшить ситуацию.
Хорошо, с этим введением в проблему, вот реальный вопрос: если у вас было медленное приложение Java EE, работающее на компьютере, чье использование ЦП и памяти никогда не превышало 20%, и при работе с 500+ пользователями вы показали две вещи: 1) что запрос даже статических файлов в рамках одного и того же процесса JVM сервера приложений был чрезвычайно медленным, и 2) что запрос статического файла вне процесса JVM сервера приложений, но в том же окне был быстрым, что бы вы исследовали?
Сначала мои мысли перескочили к потокам сервера приложений, как принимающим, так и сеансовым потокам, думая, что даже запросы к статическим файлам ставятся в очередь, ожидая доступного потока, и если ЦП/память действительно не обременены налогом, то нужно больше потоков. . Но затем мы существенно увеличили потоки акцептора и сеанса, и улучшения не произошло.
Уточняющие правки:
1) Статические файлы должны обслуживаться веб-сервером, а не сервером приложений. Я использую тот факт, что в нашем случае это (к сожалению) не та конфигурация, чтобы я мог видеть производительность сервера приложений для файлов, которые он не выполняет, поэтому исключая любые затраты на производительность базы данных и т. д.
2) Я не думаю, что между запросчиками и сервером приложений есть прокси-сервер, но даже если бы он был, он не был бы перегружен, потому что статические файлы, запрашиваемые с того же компьютера сервера приложений, но за пределами экземпляра JVM приложения, немедленно возвращаются .
3) Размер кучи JVM (Xmx) установлен на 1 ГБ.
Спасибо за любую помощь!