Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

APARENT DEADLOCK Criando threads de emergência para tarefas pendentes não atribuídas


De http://www.mchange.com/projects/c3p0/#other_ds_configuration

numHelperThreads e maxAdministrativeTaskTime ajuda a configurar o comportamento dos conjuntos de encadeamentos do DataSource. Por padrão, cada DataSource tem apenas três threads auxiliares associados. Se o desempenho parecer se arrastar sob carga pesada, ou se você observar via JMX ou inspeção direta de um PooledDataSource, que o número de "tarefas pendentes" geralmente é maior que zero, tente aumentar numHelperThreads. maxAdministrativeTaskTime pode ser útil para usuários com tarefas que travam indefinidamente e mensagens "APPARENT DEADLOCK". (Consulte o Apêndice A para mais informações.)

maxAdministrativeTaskTime Padrão:0 segundos antes que o pool de threads de c3p0 tentará interromper uma tarefa aparentemente travada. Raramente útil. Muitas das funções do c3p0 não são executadas por threads de cliente, mas de forma assíncrona por um pool de threads interno. A assincronia do c3p0 melhora o desempenho do cliente diretamente e minimiza o tempo que os bloqueios críticos são mantidos, garantindo que as operações lentas do jdbc sejam executadas em threads sem bloqueio. Se, no entanto, algumas dessas tarefas "travar", ou seja, elas não forem bem-sucedidas nem falharem com uma exceção por um período de tempo prolongado, o pool de threads do c3p0 pode ficar esgotado e as tarefas administrativas podem ser submetidas a backup. Se as tarefas são simplesmente lentas, a melhor maneira de resolver o problema é aumentar o número de threads, via numHelperThreads . Mas se as tarefas às vezes travam indefinidamente, você pode usar esse parâmetro para forçar uma chamada para o método interrupt() do thread de tarefa se uma tarefa exceder um limite de tempo definido. [c3p0 acabará se recuperando de tarefas travadas de qualquer maneira sinalizando um "APPARENT DEADLOCK" (você verá isso como um aviso nos logs), substituindo os threads de tarefas do pool de threads e interrompendo () os threads originais. Mas deixar o pool entrar em APARENT DEADLOCK e depois se recuperar significa que, por alguns períodos, o desempenho do c3p0 será prejudicado. Portanto, se você estiver vendo essas mensagens, aumentar numHelperThreads e definir maxAdministrativeTaskTime pode ajudar . maxAdministrativeTaskTime deve ser grande o suficiente para que qualquer tentativa razoável de adquirir uma conexão do banco de dados, para testar uma conexão, ou duas destruam uma conexão, seja bem-sucedida ou falhe dentro do tempo definido. Zero (o padrão) significa que as tarefas nunca são interrompidas, que é a melhor e mais segura política na maioria das circunstâncias. Se as tarefas forem apenas lentas, aloque mais threads. Se as tarefas estiverem suspensas para sempre, tente descobrir o porquê, e talvez definir maxAdministrativeTaskTime possa ajudar nesse meio tempo.
The default is 3 for numHelperThreads , increase this to 8-10 

setting maxAdministrativeTaskTime will help