Создание CFC в Coldfusion требует переменного времени на выполнение

Я делал некоторые записи времени создания объектов в нашем процессе открытия учетной записи в производстве. Периодически инициализация объекта занимала больше времени, чем ожидалось. Под инициализацией я подразумеваю вызов его 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

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


person Barry Jordan    schedule 11.03.2010    source источник


Ответы (5)


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

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

<cfset variables.productionMode = arguments.productionMode />

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

<cfset setProductionMode(arguments.productionMode) />

Возможно, structAppend?

<cfset structAppend(variables, arguments) />

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

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

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

person Greg Stevens    schedule 11.03.2010
comment
Привет, Грег, я использую первый метод, прямой набор. Мы используем cf8. Я попытаюсь изолировать createObject (), но считаю, что на самом деле он не создается до тех пор, пока для него не будет вызван метод. - person Barry Jordan; 11.03.2010
comment
Спасибо, Базза, я на самом деле только что переключаюсь с cf7 на cf9, и я забыл, что CF8 может автоматически вызывать метод init сразу после вызова createObject, не уверен. Я знаю, что в CF 7 init был просто псевдоконструктором и никогда не запускался автоматически. Другой способ изолировать - это просто ‹cfreturn /› в самом начале метода инициализации, просто чтобы посмотреть, является ли это штрафом за создание объекта или чем-то странным с этим методом. Удачи! - person Greg Stevens; 12.03.2010

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

person rip747    schedule 11.03.2010

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

person Barry Jordan    schedule 15.03.2010

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

person Tom Hubbard    schedule 11.03.2010

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

И какая у вас версия CF? Выполняются ли на серверах обновления .1 (если применимо, например, 8.01).

person John Whish    schedule 11.03.2010
comment
Привет, Джон, использую CF8 с обновлениями .1, нет активности сети / веб-службы / базы данных в методе инициализации, это странная вещь. Никакого аудита не происходит. - person Barry Jordan; 11.03.2010