Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Índice

Objetivos


Problemas de lentidão no TOTVS Fluig Plataforma podem acontecer por diversos motivos, por isso, reunimos alguns métodos e ações que podem auxiliar o usuário a reduzir ou sanar a lentidão.


Pré-requisitos



Limpeza de arquivos temporários e pastas keys


01. Realizar a limpeza dos arquivos temporários e pastas keys, conforme o passo a passo abaixo:

a) Parar a execução dos serviços do Fluig: (1) fluig, (2) fluig_Indexer e (3) fluig_RealTime.

b) Acessar o diretório: <diretório de instalação do Fluig>/appserver/domain.

c) Eliminar as pastas: data, log, servers e tmp.

Aviso
titleAtenção

Nesse diretório existe a pasta configuration, que não deve ser excluída, pois se trata de uma pasta fundamental para o funcionamento da plataforma. As demais pastas são todas temporárias. Caso a plataforma não as encontre, ela automaticamente recria as pastas.

Informações
titleInformação

Esse procedimento reiniciará a plataforma e limpará os arquivos de log do ambiente.

d) Apagar as pastas keys disponíveis nos caminhos:

  • <diretório de instalação do Fluig>\repository\wcmdir
  • <volume do Fluig>\keys.

e) Verificar se existem arquivos que NÃO estejam nos formatos .war, .ear ou .jar dentro das pastas apps, core e system. Caso existam, é necessário remover esses arquivos fora do formato das pastas:

  • <diretório de instalação do Fluig>\appserver\apps
  • <diretório de instalação do Fluig>\appserver\core
  • <diretório de instalação do Fluig>\appserver\system
Nota
titleImportante

Os arquivos temporários gerados nestas pastas são excluídos no momento da finalização dos serviços, porém, em casos de desligamentos forçados do ambiente estes arquivos podem não ser excluídos automaticamente. Assim, é necessário fazer a exclusão manualmente, geralmente, os arquivos temporários estão no formato .tmp ou são diretórios como o mesmo nome.

f) Iniciar novamente os serviços do Fluig: (1) fluig_Indexer, (2) fluig_RealTime e (3) fluig.


Utilização do agendador de tarefas


01. Recomendamos a configuração da limpeza de notificações e da limpeza arquivos temporários de documentos através do agendador de tarefas do Fluig.

Saiba mais em: Plataforma ❙ Agendador de tarefas


02. Em casos extremos de lentidão, é possível reduzir o tamanho das tabelas de alerta no banco de dados através da instrução DELETE ou TRUNCATE. No entanto, NÃO recomendamos a manipulação recorrente do banco, o correto é a ativação do agendador de tarefas. 

a) Instrução DELETE: É usada para excluir as linhas de uma tabela, porém, não libera o espaço ocupado por essas linhas.

Bloco de código
languagesql
DELETE FROM FDN_ALERTSENDER;
DELETE FROM FDN_ALERTACTION;
DELETE FROM FDN_ALERTMETADATA;
DELETE FROM FDN_ALERT;
DELETE FROM FDN_ALERTOBJECT;

b) Instrução TRUNCATE: É usada para excluir as linhas de uma tabela e liberar o espaço ocupado por essas linhas.

Bloco de código
languagesql
TRUNCATE TABLE FDN_ALERTSENDER;  
TRUNCATE TABLE FDN_ALERTACTION;  
TRUNCATE TABLE FDN_ALERTMETADATA;  
TRUNCATE TABLE FDN_ALERT;  
TRUNCATE TABLE FDN_ALERTOBJECT;


Datasets utilizando datasources nativos do Fluig


01. Executar as consultas abaixo no banco de dados e enviar os resultados em prints ou formato .csv para a equipe de Suporte Fluig. Para isso, é necessária a abertura de um ticket no Portal do Cliente:

Bloco de código
languagesql
select COD_DATASET from serv_dataset where DSL_DATASET like '%FluigDS%'; 

select nr_documento, COD_EVENT from event_ficha where DSL_EVENT like '%FluigDS%'; 

select COD_EVENT from event_geral where DSL_EVENT like '%FluigDS%'; 

select event_proces.COD_DEF_PROCES, COD_EVENT from event_proces where DSL_EVENT like '%FluigDS%';


02. O que o resultado das consultas dizem?

a) Se as queries retornarem vazias, sem nenhum resultado, significa que as práticas de desenvolvimento do seu ambiente estão corretas e não necessitam de ajustes.

b) Caso alguma query retorne resultados, é sinal que existem datasets customizados utilizando os datasources nativos da plataforma FluigDS e FluigDSRO. No exemplo abaixo, uma das queries retornou 36 resultados:

c) Essa prática de desenvolvimento não é recomendada, pois o Fluig disputa o pool de conexões no banco de dados com os datasets que utilizam os datasources nativos. O resultado disso é lentidão, queda e/ou indisponibilidade do ambiente, até que este, seja reinicializado ou ocorra a liberação da conexão com o banco novamente.

d) A partir da atualização 1.6.5-190514, sempre que realizar um desenvolvimento usando o datasource da plataforma, é indispensável utilizar o AppDS.

e) Verificar cada dataset retornado pelas queries e realizar o ajuste no desenvolvimento para que utilize o AppDS, conforme documentação: Datasets acessando banco de dados externo


Arquivos de instalação relacionados a lentidão


01. Os arquivos de instalação abaixo são os mais solicitados pela equipe Suporte Fluig. Caso seja necessário a abertura de um ticket no Portal do Cliente, anexe esses arquivos ao chamado, pois agilizará bastante o processo de atendimento:

  • <diretório de instalação do Fluig>\appserver\domain\configuration\domain.xml
  • <diretório de instalação do Fluig>\appserver\domain\configuration\host.xml
  • <diretório de instalação do Fluig>\appserver\domain\servers\fluig1\log\server.log
  • <diretório de instalação do Fluig>\appserver\domain\log\host-controller.log
  • <diretório de instalação do Fluig>\appserver\domain\log\process-controller.log
  • <diretório de instalação do Fluig>\node\fluig.rt\package.json
  • <diretório de instalação do Fluig>\node\fluig.rt\logs
  • <fluig.conf> (Arquivo que fica dentro do servidor do Proxy Reverso)

02. No entanto, preconizamos que nossos usuários tenham autonomia para detectar as causas de lentidão do seu ambiente. Assim, disponibilizamos uma série de achados nos arquivos de instalação e que podem ocasionar lentidão.

server.log


01. O server.log pode ser consultado em: <diretório de instalação do Fluig>\appserver\domain\servers\fluig1\log\server.log.

02. Geralmente, o server.log é um arquivo extenso e sugerimos que consulte: Ferramentas de Análise de Log | Ferramentas indicadas | glogg

03. Termos de buscas mais comuns no glogg:

  • ERROR;
  • ja esta sendo executado por;
  • executou por;
  • invokeFunction.servicetask64;
  • invokeFunction.createDataset;
  • Thread em execução (ex.: default task-19748).


04. Principais achados no server.log:

a) Sincronização de datasets levando mais tempo que o tolerável para finalizar as sincronizações. No exemplo, os datasets estão sincronizando por mais de 2500 segundos:

Bloco de código
languagejava
2023-05-29 10:42:00,740 WARN com.fluig.monitoring.jschronos.JSChronos DatasetMetaListServiceBean.datasetSync executou por 2520 segundos

2023-05-29 10:42:00,740 INFO com.fluig.bpm.service.DatasetMetaListServiceBean Fim da sincronização do Dataset : dsFuncionario

2023-05-29 11:08:39,167 WARN com.fluig.monitoring.jschronos.JSChronos DatasetMetaListServiceBean.datasetSync executou por 2318 segundos

2023-05-29 11:08:39,168 INFO com.fluig.bpm.service.DatasetMetaListServiceBean Fim da sincronização do Dataset : dsEmpresas


b) Execução de datasets customizados com tempo maior que 5 segundos. Normalmente, essa situação está relacionada com a utilização dos datasources nativos do Fluig nesses desenvolvimentos. Exemplos:

Bloco de código
languagejava
2022-11-23 15:59:03,511 WARN  [com.fluig.monitoring.jschronos.JSChronos] (JSChronos.CustomizationManagerImpl.invokeFunction.createDataset) CustomizationManagerImpl.invokeFunction.createDataset ja esta sendo executado por 2211 segundos params: [[[Ljava.lang.String;@268d1e17, null, null], Thread = default task-6727, datasetId = dsDatabase]
2.211 segundos

2022-11-24 08:51:22,088 WARN  [com.fluig.monitoring.jschronos.JSChronos] (JSChronos.CustomizationManagerImpl.invokeFunction.createDataset) CustomizationManagerImpl.invokeFunction.createDataset ja esta sendo executado por 60 segundos params: [[[Ljava.lang.String;@7cec0760, [Lcom.totvs.technology.foundation.dataset.SearchConstraint;@64de871c, null], Thread = default task-35, datasetId = dsChecklistCRUD]

2023-02-14 09:17:47,722 WARN  [com.fluig.monitoring.jschronos.JSChronos] (JSChronos.CustomizationManagerImpl.invokeFunction.createDataset) CustomizationManagerImpl.invokeFunction.createDataset ja esta sendo executado por 300 segundos params: [[null, [Lcom.totvs.technology.foundation.dataset.SearchConstraint;@67eb8082, null], Thread = default task-389, datasetId = ds_sql_update]

2023-02-14 09:17:56,587 WARN  [com.fluig.monitoring.jschronos.JSChronos] (JSChronos.CustomizationManagerImpl.invokeFunction.servicetask64) CustomizationManagerImpl.invokeFunction.servicetask64 ja esta sendo executado por 120 segundos params: [[Process id =  alteracao_de_preco, Process Version = 23, Process Current UserId = bruno.vieira], Thread = default task-413, datasetId = workflowColleagueRole]


c) Os termos "invokeFunction.servicetask64"e "invokeFunction.createDataset",geralmente, possuem relação com datasets de Workflow (Processos):

Bloco de código
languagejava
titleinvokeFunction.servicetask64
2023-02-14 08:39:38,114 WARN  [com.fluig.monitoring.jschronos.JSChronos] (default task-323) CustomizationManagerImpl.invokeFunction.servicetask64 executou por 565 segundos

2023-02-14 08:39:38,114 WARN  [com.fluig.monitoring.jschronos.JSChronos] (default task-323) params: [[Process id =  alteracao_de_preco, Process Version = 23, Process Current UserId = bruno.vieira], Thread = default task-323, datasetId = workflowColleagueRole]


domain.xml


01. O domain.xml pode ser consultado em: <diretório de instalação do Fluig>\appserver\domain\configuration\domain.xml.

02. O <max-pool-size> pode ser ajustado entre 50-200 nos datasources. É possível utilizar um <max-pool-size> menor, quando houver mais de um banco de dados no mesmo servidor.

Bloco de código
languagexml
<datasources>
	<datasource jta="true" jndi-name="java:/jdbc/FluigDS" pool-name="FluigDS" enabled="true" use-java-context="false">
		<connection-url>jdbc:mysql://localhost:3306/fluig_mysql?useSSL=false&nullDatabaseMeansCurrent=true</connection-url>
		<driver>mysqlDriver</driver>
		<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
		<pool>
			<min-pool-size>10</min-pool-size>
			<max-pool-size>100</max-pool-size>
		</pool>
		<security>
			<user-name>admin</user-name>
			<password>admin</password>
		</security>
		<validation>
			<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
			<validate-on-match>true</validate-on-match>
			<background-validation>false</background-validation>
		</validation>
		<statement>
			<share-prepared-statements>false</share-prepared-statements>
		</statement>
	</datasource>
	<datasource jta="false" jndi-name="java:/jdbc/FluigDSRO" pool-name="FluigDSRO" enabled="true" use-java-context="false">
		<connection-url>jdbc:mysql://localhost:3306/fluig_mysql?useSSL=false&nullDatabaseMeansCurrent=true</connection-url>
		<driver>mysqlDriver</driver>
		<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
		<pool>
			<min-pool-size>5</min-pool-size>
			<max-pool-size>50</max-pool-size>
		</pool>
		<security>
			<user-name>admin</user-name>
			<password>admin</password>
		</security>
		<validation>
			<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
			<validate-on-match>true</validate-on-match>
			<background-validation>false</background-validation>
		</validation>
		<timeout>
			<blocking-timeout-millis>30000</blocking-timeout-millis>
		</timeout>
		<statement>
			<share-prepared-statements>false</share-prepared-statements>
		</statement>
	</datasource>
	<datasource jta="false" jndi-name="java:/jdbc/AppDS" pool-name="AppDS" enabled="true" use-java-context="false">
		<connection-url>jdbc:mysql://localhost:3306/fluig_mysql?useSSL=false&nullDatabaseMeansCurrent=true</connection-url>
		<driver>mysqlDriver</driver>
		<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
		<pool>
			<min-pool-size>5</min-pool-size>
			<max-pool-size>150</max-pool-size>
		</pool>
		<security>
			<user-name>admin</user-name>
			<password>admin</password>
		</security>
		<validation>
			<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
			<validate-on-match>true</validate-on-match>
			<background-validation>false</background-validation>
		</validation>
		<timeout>
			<blocking-timeout-millis>30000</blocking-timeout-millis>
		</timeout>
		<statement>
			<share-prepared-statements>false</share-prepared-statements>
		</statement>
	</datasource>
	<drivers>
		<driver name="mysqlDriver" module="com.mysql">
			<driver-class>com.mysql.jdbc.Driver</driver-class>
		</driver>
	</drivers>
</datasources>


host.xml


01. O host.xml pode ser consultado em: <diretório de instalação do Fluig>\appserver\domain\configuration\host.xml.

02. O tamanho de memória que o servidor consome pode ser alterado. Recomendamos utilizar os valores: max-size em 4g e size em 2g.

Bloco de código
languagexml
<server auto-start="true" group="fluig" name="fluig1">
	<jvm name="default">
		<heap max-size="4g" size="2g"/>
		<jvm-options>
			<option value="-Dfile.encoding=utf8"/>
			<option value="-XX:MaxMetaspaceSize=1024m"/>
			<option value="-Djavamelody.disabled=true"/>
			<!-- Debug
				<option value="-Xdebug"/>
				<option value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"/>
			-->
		</jvm-options>
	</jvm>
</server>

03. O Fluig suporta até 16 GB de memória, sendo essa, uma limitação do JBoss. Caso o seu servidor de aplicação tenha mais de 16 GB de memória, recomendamos o uso de um cluster para distribuir os recursos.

04. Não é preciso alterar a quantidade inicial (mínima) de memória alocada (size="2g"), pois a plataforma alocará memória de acordo com a necessidade.

Saiba mais em: Modelo de dimensionamento