Создание Coldfusion CFC занимает много времени - PullRequest
1 голос
/ 11 марта 2010

Я делал некоторые записи времени создания объектов в нашем процессе открытого аккаунта на производстве. Периодически инициализация объекта может занять больше времени, чем ожидалось. Под инициализацией я имею в виду вызов его init () и передачу пары аргументов, которые могут быть простыми переменными или объектами. например,

<cfset validateObj = createObject("component", "compExample").init( 
        productionMode = VARIABLES.productionMode, 
        ipWhiteListed = isWhiteListed, 
        ipLocatorObj = VARIABLES.ipLocatorObj ) />

Это все, что происходит в методах init (). Обычно время выполнения составляет 0 мс, но в случайное время я могу получить 3 или 3,5 секунды. Это не относится только к одному конкретному серверу или к нашему обычно загруженному периоду. Кажется, это совершенно случайно.

Одна мысль заключалась в том, что эти шаблоны были исключены из нашего кэша шаблонов, поскольку они не особенно часто используются, хотя я проверил cfstat на нескольких серверах, и максимальный CP / Sec равен -1.

Запуск CF 8,0,1

Кто-нибудь еще сталкивался с этим?

Ответы [ 5 ]

1 голос
/ 15 марта 2010

Увеличено максимальное количество элементов в кэше шаблонов. Поскольку кеш использует LRU, и эти объекты специфичны для функциональности, которая не особенно часто используется, их вытесняют из кеша. Обновил половину серверов и сохранил половину прежних и сравнил после выходных. Произошло значительное сокращение времени создания объектов на серверах, где был увеличен кэш.

1 голос
/ 11 марта 2010

всегда обновляйте jvm до последней версии, а затем проверяйте, сохраняется ли проблема.

1 голос
/ 11 марта 2010

В этом методе init может быть что-то, вызывающее что-то еще, что может привести к случайному замедлению работы. Это может быть связано с тем, как аргументы хранятся в CFC методом init.

В методе инициализации CFC это просто:

<cfset variables.productionMode = arguments.productionMode />

Или используя метод установки, такой как:

<cfset setProductionMode(arguments.productionMode) />

Возможно, structAppend?

<cfset structAppend(variables, arguments) />

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

Я думаю, что комментарии Джона Уиша - это определенно то, на что стоит обратить внимание. Кроме того, существует ли какой-либо нечетный объем трафика на этом сервере, когда метод init замедляется?

Вы пытались изолировать только вызов createObject (), чтобы посмотреть, приводит ли это к созданию объекта, приводящему к замедлению, или это действительно метод init? Обычно в объектах CF создание экземпляров может быть случайно медленным процессом. Это может быть лучше в CF 8 в последнее время, но опыт говорит, что это может быть проблемой.

0 голосов
/ 11 марта 2010

Пара мыслей .... Происходит ли какая-либо блокировка или зависимости от сети / веб-сервиса / базы данных. Есть ли у вас какие-либо аудиторские или подобные мероприятия (например, AOP)?

Кроме того, какая у вас версия CF? На серверах установлены обновления .1 (если применимо, т. Е. 8,01).

0 голосов
/ 11 марта 2010

Есть ли шанс, что вы запускаете профилировщик из диспетчера серверов? Это вызвало у нас похожую случайную медлительность.

...