Огромная разница в производительности между двумя веб-серверами, странное поведение при использовании монитора процессов

У нас есть два сервера Coldfusion, которые имеют огромную разницу в производительности и работают с одинаковым кодом на тех же самых входных данных. Код в вопросах создает большое количество CFC (компонентов Coldfusion, которые похожи на объекты в языках ООП).

Я сравнил два сервера, запустив Process Monitor и затем вызвав проблемный код на обеих машинах. Я узнал две вещи. Во-первых, Coldfusion открывает CFC-файлы каждый раз, когда создает экземпляр объекта. Это делают оба сервера, поэтому это не может быть причиной разницы в производительности. Во-вторых, быстрый сервер открывает файлы CFC напрямую, в то время как сервер с проблемой производительности, кажется, перемещается по пути, пока не достигнет желаемого файла CFC. Он делает это для каждого файла, даже для того, который был загружен ранее, и, поскольку код создает много экземпляров CFC, он становится очень медленным. Смотрите ниже частичные следы Promon, которые показывают это поведение. Для медленного сервера может потребоваться более 60 секунд, чтобы сделать то, что быстрый делает за 2 секунды.

Может кто-нибудь сказать мне, что вызывает такое поведение? Это установка Coldfusion? Поскольку Coldfusion работает поверх Java, это настройка Java? Это вариант ОС? Быстрый сервер работает под управлением Windows XP, и я думаю, что медленный сервер - это Windows Server 2003.

Дополнительный вопрос: Coldfusion, похоже, не выполняет никаких операций READ FILE над файлами CFC или CFM. Как это может быть?

Пример быстрого сервера, открывающего файлы CFC:

11:25:14.5588975    jrun.exe    QueryOpen                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5592758    jrun.exe    CreateFile                  C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5595024    jrun.exe    QueryBasicInformationFile   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5595940    jrun.exe    CloseFile                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5599628    jrun.exe    CreateFile                  C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5601600    jrun.exe    QueryBasicInformationFile   C:\CF\wwwroot\APP\com\HtmlUtils.cfc
11:25:14.5602463    jrun.exe    CloseFile                   C:\CF\wwwroot\APP\com\HtmlUtils.cfc

Эквивалентный пример медленного открытия файлов CFC на сервере:

11:15:08.1249230    jrun.exe    CreateFile                  D:\
11:15:08.1250100    jrun.exe    QueryDirectory              D:\org
11:15:08.1252852    jrun.exe    CloseFile                   D:\
11:15:08.1259670    jrun.exe    CreateFile                  D:\org
11:15:08.1260319    jrun.exe    QueryDirectory              D:\org\cli
11:15:08.1260769    jrun.exe    CloseFile                   D:\org
11:15:08.1269451    jrun.exe    CreateFile                  D:\org\cli
11:15:08.1270613    jrun.exe    QueryDirectory              D:\org\cli\cpn
11:15:08.1271140    jrun.exe    CloseFile                   D:\org\cli
11:15:08.1279312    jrun.exe    CreateFile                  D:\org\cli\cpn
11:15:08.1280086    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP
11:15:08.1280789    jrun.exe    CloseFile                   D:\org\cli\cpn
11:15:08.1291034    jrun.exe    CreateFile                  D:\org\cli\cpn\APP
11:15:08.1291709    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com
11:15:08.1292224    jrun.exe    CloseFile                   D:\org\cli\cpn\APP
11:15:08.1300568    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com
11:15:08.1301321    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1301843    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com
11:15:08.1312049    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1314409    jrun.exe    QueryBasicInformationFile   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1314633    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1315881    jrun.exe    CreateFile                  D:\
11:15:08.1316379    jrun.exe    QueryDirectory              D:\org
11:15:08.1316926    jrun.exe    CloseFile                   D:\
11:15:08.1330951    jrun.exe    CreateFile                  D:\org
11:15:08.1338656    jrun.exe    QueryDirectory              D:\org\cli
11:15:08.1339118    jrun.exe    CloseFile                   D:\org
11:15:08.1526468    jrun.exe    CreateFile                  D:\org\cli
11:15:08.1527295    jrun.exe    QueryDirectory              D:\org\cli\cpn
11:15:08.1527989    jrun.exe    CloseFile                   D:\org\cli
11:15:08.1531977    jrun.exe    CreateFile                  D:\org\cli\cpn
11:15:08.1532589    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP
11:15:08.1533575    jrun.exe    CloseFile                   D:\org\cli\cpn
11:15:08.1538457    jrun.exe    CreateFile                  D:\org\cli\cpn\APP
11:15:08.1539083    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com
11:15:08.1539553    jrun.exe    CloseFile                   D:\org\cli\cpn\APP
11:15:08.1544126    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com
11:15:08.1544980    jrun.exe    QueryDirectory              D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1545482    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com
11:15:08.1551034    jrun.exe    CreateFile                  D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1552878    jrun.exe    QueryBasicInformationFile   D:\org\cli\cpn\APP\com\HtmlUtils.cfc
11:15:08.1553044    jrun.exe    CloseFile                   D:\org\cli\cpn\APP\com\HtmlUtils.cfc

Спасибо

3 ответа

Решение

В дополнение к ответу Адама Кэмерона я бы предложил сравнить C:\ColdFusion8\lib\neo*.xml на обеих машинах и проанализировать различия, особенно neo-runtime.xml и neo-debug.xml - вот где Конфиг для ColdFusion сохранен. Опубликуйте любые интересные отличия здесь.

Если у вас нет инструмента сравнения, используйте пробную версию BeyondCompare, так как он будет работать с целыми каталогами и хорошо поддерживает XML.

Мне кажется, что на медленном сервере у вас не установлен флажок "Кеш компонента" в CFAdmin ("Настройки сервера"> "Кэширование").

Другая возможность заключается в том, что между двумя серверами установлены разные сопоставления CF (Настройки сервера> Сопоставления) и / или пути пользовательских тегов (Расширения> Пользовательские пути тегов).

Это, скорее всего, будет первым, хотя.

Вы также можете установить "Кэширование шаблона в запросе" ("Настройки сервера"> "Кэширование"), чтобы запретить поиск файлов для того же CFC после первого для данного запроса, а если это рабочий сервер, установите флажок "Доверенный кеш" (Сервер Настройки> Кэширование), что предотвратит любые обращения к файловой системе, если файл уже был загружен один раз.

ColdFusion также будет поддерживать только определенное количество скомпилированных файлов в памяти за один раз, установленное параметром "Максимальное количество кэшируемых шаблонов" ("Настройки сервера"> "Кэширование"), и вам следует попытаться установить это, чтобы охватить общее количество файлов CFML (и Методы CFC, каждый из которых компилируется в свой класс) в вашем приложении. Очевидно, это обусловлено наличием достаточного объема ОЗУ, доступного для JVM, чтобы справиться с этим. Это может быть немного уравновешивающим действием.

Попробуйте проверить:

  1. Настройки JVM, особенно настройки памяти
  2. Убедитесь, что режим отладки выключен
  3. Настройки проверки на вирусы. Проверьте, пропущены ли файлы Java
  4. Проверьте где cfdump используется.
Другие вопросы по тегам