У меня есть несколько устаревшее приложение Java EE, работающее на Sun Application Server 8.1 (он же SJSAS, предшественник Glassfish). С более чем 500 одновременными пользователями приложение становится неприемлемо медленным, и я пытаюсь помочь определить, где тратится большая часть времени выполнения и что можно сделать, чтобы ускорить его. До сих пор мы экспериментировали и измеряли с помощью LoadRunner, журналов сервера приложений, Oracle statpack, snoop, настраивали потоки акцептора и сеанса (рабочего) сервера приложений, настраивали размер партии Hibernate и использовали выбор извлечения и т. Д., Но после некоторого начального выигрыша мы изо всех сил пытаемся улучшить ситуацию.Производительность сервера приложений Java
Хорошо, с этим введением в проблему, вот реальный вопрос: если у вас было медленное приложение Java EE, работающее на ядре, чей процессор и память никогда не превышали 20%, а во время работы с более чем 500 пользователями вы показывали два вещи: 1), что запрос даже статических файлов в одном и том же процессе JVM-процесса сервера был чрезвычайно медленным, и 2) что запрос статического файла за пределами процесса JVM-сервера приложения, но на том же поле был быстрым, что бы вы исследовали?
Мои мысли изначально перешли на потоки сервера приложений, как потоки акцептора, так и сеанса, считая, что даже запросы на статические файлы были поставлены в очередь, ожидая доступного потока, и если CPU/память не облагались налогом, потоки были в порядке. Но тогда мы существенно увеличили как акцепторные, так и сеансовые потоки, и улучшения не было.
Разъяснение редактирует:
1) Статические файлы должны обслуживаться веб-сервером, а не на сервере приложений. Я использую тот факт, что в нашем случае это (к сожалению) не является конфигурацией, поэтому я могу видеть производительность сервера приложений для файлов, которые он не выполняет, поэтому исключая затраты на производительность базы данных и т. Д.
2) Я не думаю, что между прокси-серверами и сервером приложений есть прокси-сервер, но даже если он был, он не перегружен, потому что статические файлы, запрашиваемые с одного и того же сервера приложений, но вне экземпляра JVM приложения немедленно возвращаются.
3) Размер кучи JVM (Xmx) установлен в 1 ГБ.
Спасибо за помощь!
Являются ли запросы проксированными (через Apache и т. Д.), Прежде чем они прибудут в SJSAS? – digitalsanctum 2008-11-14 15:42:06
Насколько я знаю, запросы не проксированы. Запросы идут непосредственно от машин LoadRunner до процесса сервера приложений. Но это очень хорошее предложение подтвердить, чтобы я не сомневался. Когда я подтвержу, я опубликую обновление. Благодаря!. – jlpp 2008-11-14 15:45:27