Pergunta

Eu tenho feito alguns registro de tempos de criação de objeto em nosso processo conta aberta na produção. Periodicamente, inicializar um objeto levaria caminho mais longo do que o esperado. Inicializando Quero dizer chamando-o de init () e passando um par de argumentos que podem ser variáveis ??simples ou objetos. por exemplo.

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

Isso é tudo o que acontece no init () métodos. Geralmente o tempo de execução seria 0ms, mas em momentos aleatórios eu poderia ter 3 ou 3,5 segundos. Esta não é específico para um determinado servidor ou ao nosso período geralmente ocupado. Parece ser bastante aleatória.

Um pensamento foi que esses modelos estavam sendo expulsos de nosso cache de modelo, pois não são usados ??especialmente freqüentemente, embora eu verifiquei cfstat em um número de servidores ea CP max / Sec é -1.

Running CF 8,0,1

Tem ninguém nunca se deparar com isso?

Foi útil?

Solução 3

Aumentou o número máximo de itens no cache de modelo. Como o cache usa LRU e esses objetos são específicos para a funcionalidade que não é particularmente usado freqüentemente eles estavam sendo expulsos do cache. Atualizado metade dos servidores e manteve a metade da mesma e comparados após o fim de semana. Houve uma redução dramática em tempos objeto instanciação nos servidores onde o cache foi aumentado.

Outras dicas

Pode haver algo dentro desse método init chamar outra coisa que poderiam fazer com que o desempenho lento aleatória. Isto pode ser devido à forma como os argumentos estão sendo armazenados dentro do CFC pelo método init.

Dentro do método CFC de inicialização, é apenas:

<cfset variables.productionMode = arguments.productionMode />

Ou usando um método setter tais como:

<cfset setProductionMode(arguments.productionMode) />

Talvez um structAppend?

<cfset structAppend(variables, arguments) />

O primeiro método, apenas um conjunto straight-up seria menos susceptível de causar quaisquer problemas. O segundo método, usando um método setter, poderia retardar as coisas dependendo do que esse método setter está fazendo, o que outros métodos pode ser chamado, etc ... O terceiro método deve ser bastante consistente, mas eu vi structAppend e outras funções internas aleatoriamente retardar, sem motivo aparente.

Eu acho que os comentários de John Whish são definitivamente algo para olhar. Assim, há alguma quantidade ímpar de tráfego ocorreu neste servidor quando o método init desacelera?

Você já tentou isolar apenas a chamada CreateObject () para ver se ele é a instanciação objeto resultando na desaceleração ou se ele realmente é o método init? Geralmente em CF objecto instanciação pode ser um processo lento aleatoriamente. Isto pode ser melhor em CF 8 ultimamente, mas a experiência diz que poderia ser o problema.

sempre atualizar a JVM para a versão mais recente e, em seguida, ver se o problema ainda existe.

Qualquer chance que você está executando o profiler do gerente servidor? Isso nos causou lentidão aleatório similar.

Os pares de pensamentos .... Existe algum bloqueio acontecendo ou dependências em uma rede / webservice / banco de dados. Você tem tem qualquer auditoria ou similar acontecendo (por exemplo AOP)?

Também qual a versão CF você está? São os servidores que executam os .1 Atualizações (se aplicável, ou seja, 8,01).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top