Re[3]: Разница в производительности приложения на Windows и
От: pagrus  
Дата: 29.08.08 12:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, pagrus, Вы писали:


P>>Здравствуйте, Аноним, Вы писали:


P>>Я бы советовал профайлить и тестировать.

P>>Важный вопрос — проблемы с производительностью на уровне вашего приложения? Или JVM? Или операционной системы? Выясните, после этого станет понятнее что делать. Профайлер и собственные мини-тесты в этом помогут.

P>>Например, осли проблемы окажутся на уровне ОС, то во многих ситуация решение ложится на заказчика. "У вас проблема с сервером, и вот почему мы так считаем:...". Или вы брали на себя обязательство настраивать и поддерживать его серверы? Кстати, в такой ситуации можете это предложить за отдельные средства. Если вам это нужно.


А>Спасибо большое, но подскажите, пожалуйста, как это можно обосновать? Я пока даже не представляю как профайлинг или тесты могут показать, что проблема именно в сервере.


Ну например.

Используя профайлер вы находите, какие именно вызовы съёдают большую часть времени. Т.е. найдите сервлетный service() метод, посмотрите дерево вызовов под ним, что сколько времени заняло. Спускайтесь по дереву вызовов до классов JDK. Сравните это с результатом профайлинга на WinXP. Очень вероятно что тут же найдёте узкое место и поймёте, в приложении ли оно.
Если проблема не видна — посмотрите выше service(), возможно проблема в самом tomcat.

Также пишите мини-тесты на java. Ваше приложение делает много ввода-вывода? Напишите тест на копирование файлов. Убедитесь, что разницу в производительности он отражает, иначе приближаете содержимое теста к реальному приложению.
Таким же образом можно проверять вычислительную часть, взаимодействие по сети, обработку тестовых jsp и т.д. Просто разрабатываете маленькую программу, примитивно симулирующую тот или иной аспект приложения, смотрите насколько отличается производительность. Опять же, профайлер укажет правильное направление для этого.

На выходе вы имеете тест(ы), наглядно показывающий разницу в производительности у вас и у них. Это и есть тот самый аргумент.


Кстати посоветуйте клиенту убедиться, что сервер имеет достаточно свободной физической памяти и не свопится.
Ещё можно включить трассировку GC, проверить на предмет аномалий. Я таким не занимался, но в гугле можно найти.
Также они могут попробовать включить/выключить APR для tomcat и последить за результатами.

Ну и снова нетехнический аспект — если проблема на их стороне, а вы тратите много времени, можете говорить о дополнительной его оплате.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.