Назад | Перейти на главную страницу

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

У нас есть два сервера 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

Спасибо

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

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

Хотя, скорее всего, первое.

Вы также можете установить «Cache Template In Request» (Server Settings> Caching), чтобы предотвратить поиск файла для того же CFC после первого для данного запроса, и если это производственный сервер, отметьте «Trusted cache» (Server Настройки> Кеширование), что предотвратит поиск файловой системы, если файл уже был загружен один раз.

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

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

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

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

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