AnsweredAssumed Answered

Uso de CPU muy alto - SOLUCIONADO

Question asked by alkalde on Apr 10, 2014
Latest reply on Apr 13, 2014 by alkalde
Hola a todos,

soy nuevo en esto de Alfresco y ando haciendo una pruebas para poner un gestor documental en la empresa. He instalado un Alfresco Community 4.2.f en un servidor con Ubuntu 64bits, en realidad es un Zentyal 3.4 de 64Bit que está basado en Ubuntu e incluye una administración via web para implementar toda una serie de servicios. He configurado CIFS para montar una unidad de red en los clientes windows. Esta noche me he dejado copiando 3 carpetas, en total unos 40gb y me he encontrado en el log estos errores de forma repetitiva:
<blockcode>


2014-04-10 02:55:16,926  WARN  [solr.tracker.CoreTracker] [SolrTrackingPool-alfresco3] Node index failed and skipped for 265109 in Tx 877023
java.net.SocketTimeoutException: Read timed out
   at java.net.SocketInputStream.socketRead0(Native Method)
   at java.net.SocketInputStream.read(SocketInputStream.java:150)
   at java.net.SocketInputStream.read(SocketInputStream.java:121)
   at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
   at sun.security.ssl.InputRecord.read(InputRecord.java:480)
   at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
   at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
   at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
   at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
   at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
   at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
   at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
   at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
   at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(MultiThreadedHttpConnectionManager.java:1413)
   at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
   at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
   at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
   at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
   at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
   at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
   at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
   at org.alfresco.httpclient.AbstractHttpClient.executeMethod(AbstractHttpClient.java:135)
   at org.alfresco.httpclient.AbstractHttpClient.sendRemoteRequest(AbstractHttpClient.java:111)
   at org.alfresco.httpclient.HttpClientFactory$HttpsClient.sendRequest(HttpClientFactory.java:371)
   at org.alfresco.solr.client.SOLRAPIClient.getTextContent(SOLRAPIClient.java:992)
   at org.alfresco.solr.tracker.CoreTracker.addContentPropertyToDoc(CoreTracker.java:2872)
   at org.alfresco.solr.tracker.CoreTracker.indexNode(CoreTracker.java:2505)
   at org.alfresco.solr.tracker.MultiThreadedCoreTracker$NodeIndexWorkerRunnable.doWork(MultiThreadedCoreTracker.java:812)
   at org.alfresco.solr.tracker.MultiThreadedCoreTracker$AbstractWorkerRunnable.run(MultiThreadedCoreTracker.java:753)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   at java.lang.Thread.run(Thread.java:724)
2014-04-10 03:05:46,479  ERROR [solr.core.SolrCore] [pool-1-thread-1] java.lang.OutOfMemoryError: Java heap space

2014-04-10 04:18:41,235  ERROR [solr.core.SolrCore] [pool-1-thread-1] java.lang.NullPointerException
   at org.alfresco.solr.AlfrescoSolrEventListener$OwnerIdManager.addAll(AlfrescoSolrEventListener.java:3302)
   at org.alfresco.solr.AlfrescoSolrEventListener.newSearcher(AlfrescoSolrEventListener.java:209)
   at org.apache.solr.core.SolrCore$4.call(SolrCore.java:1163)
   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
   at java.util.concurrent.FutureTask.run(FutureTask.java:166)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
   at java.lang.Thread.run(Thread.java:724)

2014-04-10 04:18:57,149  ERROR [solr.core.SolrCore] [pool-1-thread-1] java.lang.NullPointerException

</blockcode>

Tenemos que subir unos 300 GB de documentación, y al subir mediante CIFS carpetas con tamaño de varios GB se empieza a comer la memoria del servidor y el uso de la CPU pasa al 700%, quedando el sistema lento. El servidor tiene 2 procesadores XEON de 4 nucleos y 16GB de RAM, y lleva 2 Discos Duros SATA en RAID 1 de 7200RPM. Mientras Alfresco está en reposo el uso de la CPU tiene algunos picos por encima del 100% pero normalmente está entre el 0% y 40%. El problema parece que viene al querer copiar carpetas que ocupan cantidad de GB, el uso de CPU empieza a subir de forma paulatina hasta llegar al 700% y la memoria empieza a consumirse poco a poco, si paro la copia de ficheros el uso de CPU vuelve a estar bien, pero en cuanto se intenta acceder desde los equipos clientes a la unidad CIFS solo para explorar las carpetas vuelve a subir con picos entre el 400% y el 700% de CPU.

En /opt/alfresco/tomcat/bin/setenv.sh tengo:

<blockcode>

JAVA_OPTS="-XX:-DisableExplicitGC -XX:ReservedCodeCacheSize=1024m $JAVA_OPTS "
JAVA_OPTS="-XX:MaxPermSize=1024M -Xms8G -Xmx8G $JAVA_OPTS "

</blockcode>


He subido los parámetros que venían por defecto para usar 8GB de memoria, tengo 16GB de RAM, no se si es correcto.

En el alfresco-global.properties tengo:
<blockcode>

###############################
## Common Alfresco Properties #
###############################

dir.root=/opt/alfresco/alf_data

alfresco.context=alfresco
alfresco.host=127.0.0.1
alfresco.port=8080
alfresco.protocol=http

share.context=share
share.host=127.0.0.1
share.port=8080
share.protocol=http

### database connection properties ###
db.driver=org.gjt.mm.mysql.Driver
db.username=XXXXXXXXXX
db.password=XXXXXXXXXX
db.name=alfresco
db.url=jdbc:mysql://localhost/alfresco?useUnicode=yes&characterEncoding=UTF-8

### FTP Server Configuration ###
ftp.enabled=true
ftp.port=2121

### RMI service ports ###
alfresco.rmi.services.port=50500
avm.rmi.service.port=0
avmsync.rmi.service.port=0
attribute.rmi.service.port=0
authentication.rmi.service.port=0
repo.rmi.service.port=0
action.rmi.service.port=0
deployment.rmi.service.port=0

### External executable locations ###
ooo.exe=/opt/alfresco/libreoffice/program/soffice.bin
ooo.enabled=false
ooo.port=8100
img.root=/opt/alfresco/common
img.dyn=${img.root}/lib
img.exe=${img.root}/bin/convert
swf.exe=/opt/alfresco/common/bin/pdf2swf
swf.languagedir=/opt/alfresco/common/japanese

jodconverter.enabled=true
jodconverter.officeHome=/opt/alfresco/libreoffice
jodconverter.portNumbers=8100

### Initial admin password ###
alfresco_user_store.adminpassword=b5c8f974de77b57610342debfa984c3a

### E-mail site invitation setting ###
notification.email.siteinvite=false

### License location ###
dir.license.external=/opt/alfresco

### Solr indexing ###
index.subsystem.name=solr
dir.keystore=${dir.root}/keystore
solr.port.ssl=8443

### BPM Engine ###
system.workflow.engine.jbpm.enabled=false

### CIFS SERVER ###

cifs.enabled=true
cifs.domain=xxxxxxxx.xxxxxx.xxxxxx
cifs.serverName=serverdell
cifs.hostannounce=true
cifs.ipv6.enabled=false
cifs.tcpipSMB.port=445
cifs.netBIOSSMB.namePort=137
cifs.netBIOSSMB.datagramPort=138
cifs.netBIOSSMB.sessionPort=139
cifs.WINS.autoDetectEnabled=true
cifs.pseudoFiles.shareURL.enabled=false
cifs.pseudoFiles.enabled=false
cifs.pseudoFiles.explorerURL.enabled=false

</blockcode>

Otro dato es que estoy usando como base de datos MySQL y que Alfresco está corriendo bajo root , ya se que no es buena idea de que corra bajo el usuario root, no se si aparte de los problemas de seguridad que pueda haber tiene algo que ver con mi problema de CPU. Esta bajo root por que a pesar de hacer todas las redirecciones de puertos con iptables no he conseguido nunca que funcione CIFS por los puertos originales tcp 445,139 y udp137,138, si funcionaban bien por 1445, 1337, 1338 y 1339, pero las redirecciones no funcionaban. Por eso opte, al menos de momento, por dejar los puertos normales en el alfresco-global.properties y correrlo con el usuario root ya que problemas de suguridad no voy a tener en el entorno que va a correr y no va a estar accesible desde internet.

Desde ya muchas gracias por vuestro tiempo y a ver si alguien le ha pasado algo similar y puede ayudarme.

Saludos.

Outcomes