JVM Heap size

cancel
Showing results for 
Search instead for 
Did you mean: 
rguinot
Customer

Re: JVM Heap size

Quelle est votre connaissance du fonctionnement de la JVM ? apparemment faible.

L'erreur "Permgen space" que vous rencontrez est explicite, dimensionnement trop faible de la perm gen, dimensionnable (par exemple) par "-XXSmiley TongueermSize=160m -XX:MaxPermSize=160m". La perm gen n'est pas dans la heap dont les bornes mémoires se configurent, elle,  via , par exemple, Xms et Xmx. Il y a des dizaines de posts et de FAQ parlant de l'erreur que vous rencontrez.
onyme
Member II

Re: JVM Heap size

Bonsoir,

Vous est sympathique en qualifiant mon niveau de JVM de faible. Il est nul. J'appartiens à la génération de ceux qui ont commencé sur des cartes perforées et où on optimisait les programmes en langage machine à l'octet près tellement la mémoire coutait chère…
Pour le moment les tests sont positifs.
Trêve de plaisanterie, merci pour l'info complémentaire. J'ai vu beaucoup de choses sur les forum Alfresco (FR et EN) et même autres. Le wiki http://wiki.alfresco.com/wiki/JVM_Tuning pourrait être un peu plus explicite en détaillant en quelques mots les différents paramètres. Mais vu mon niveau je n'ose pas proposer qq chose.

Bien cordialement et encore merci
onyme
Member II

Re: JVM Heap size

Bonjour,

Je reviens avec mes soucis de permgen.
Je poursuis mes tests avec la 3.0b et je retrouve les mêmes problèmes que précédemment avec la 3.0a.

le catalina.out

16:48:38,750  INFO  [service.descriptor.DescriptorService] Alfresco JVM - v1.6.0_18-b07; maximum heap size 247,500MB
16:48:38,751  WARN  [service.descriptor.DescriptorService] Alfresco JVM - WARNING - maximum heap size 247,500MB is less than recommended 512MB
16:48:38,754  INFO  [service.descriptor.DescriptorService] Alfresco started (Community): Current version 3.4.0 (b 3262) schema 4111 - Originally installed version 3.4.0 (b 3262) schema 4111
16:48:38,766  INFO  [management.subsystems.ChildApplicationContextFactory] Starting 'Replication' subsystem, ID: [Replication, default]
16:48:38,799  INFO  [alfresco.config.FixedPropertyPlaceholderConfigurer] Loading properties file from class path resource [alfresco/version.properties]
16:48:38,799  INFO  [alfresco.config.JndiPropertyPlaceholderConfigurer] Loading properties file from class path resource [alfresco/alfresco-shared.properties]
16:48:38,801  INFO  [alfresco.config.FixedPropertyPlaceholderConfigurer] Loading properties file from class path resource [alfresco/domain/cache-strategies.properties]
16:48:38,801  INFO  [alfresco.config.FixedPropertyPlaceholderConfigurer] Loading properties file from class path resource [alfresco/module/org.alfresco.module.vti/context/vti.properties]
16:48:38,802  INFO  [alfresco.config.FixedPropertyPlaceholderConfigurer] Loading properties file from URL [file:/opt/alfresco/alf/tomcat/shared/classes/alfresco/extension/custom-vti.properties]
16:48:38,818  INFO  [management.subsystems.ChildApplicationContextFactory] Startup of 'Replication' subsystem, ID: [Replication, default] complete
16:48:41,481  INFO  [module.vti.VtiServer] Vti server started successfully on port: 7070
16:48:50,228 User:System INFO  [extensions.webscripts.AbstractRuntimeContainer] Initialised Repository Web Script Container (in 8645.831ms)
16:48:50,228  ERROR [web.context.ContextLoader] Context initialization failed
org.alfresco.error.AlfrescoRuntimeException: 10190001 Exception in Transaction.
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:462)
   at org.alfresco.repo.web.scripts.RepoStore$3.doWork(RepoStore.java:389)
   at org.alfresco.repo.web.scripts.RepoStore$3.doWork(RepoStore.java:386)
   at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:508)
   at org.alfresco.repo.web.scripts.RepoStore.getDocumentPaths(RepoStore.java:385)
   at org.springframework.extensions.webscripts.DeclarativeRegistry.initWebScripts(DeclarativeRegistry.java:223)
   at org.springframework.extensions.webscripts.DeclarativeRegistry.reset(DeclarativeRegistry.java:178)
   at org.springframework.extensions.webscripts.AbstractRuntimeContainer.reset(AbstractRuntimeContainer.java:242)
   at org.alfresco.repo.web.scripts.RepositoryContainer.init(RepositoryContainer.java:591)
   at org.alfresco.repo.web.scripts.RepositoryContainer.reset(RepositoryContainer.java:565)
   at org.alfresco.repo.web.scripts.RepositoryContainer$4.doWork(RepositoryContainer.java:519)
   at org.alfresco.repo.security.authentication.AuthenticationUtil.runAs(AuthenticationUtil.java:508)
   at org.alfresco.repo.web.scripts.RepositoryContainer.onApplicationEvent(RepositoryContainer.java:523)
   at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97)
   at org.alfresco.repo.management.SafeApplicationEventMulticaster.multicastEvent(SafeApplicationEventMulticaster.java:78)
   at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:294)
   at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:858)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:419)
   at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
   at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192)
   at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
   at org.alfresco.web.app.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:63)
   at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)
   at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
   at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
   at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
   at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
   at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
   at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
   at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
   at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
   at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
   at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
   at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
   at org.apache.catalina.core.StandardService.start(StandardService.java:519)
   at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
   at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.OutOfMemoryError: PermGen space
   at java.lang.String.intern(Native Method)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1394)
   at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
   at org.apache.lucene.search.BooleanQuery$BooleanWeight.scorer(BooleanQuery.java:223)
   at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:131)
   at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:112)
   at org.apache.lucene.search.Hits.getMoreDocs(Hits.java:113)
   at org.apache.lucene.search.Hits.<init>(Hits.java:80)
   at org.apache.lucene.search.Searcher.search(Searcher.java:50)
   at org.apache.lucene.search.Searcher.search(Searcher.java:40)
   at org.alfresco.repo.search.impl.lucene.ADMLuceneSearcherImpl.query(ADMLuceneSearcherImpl.java:447)
   at org.alfresco.repo.search.impl.lucene.ADMLuceneSearcherImpl.query(ADMLuceneSearcherImpl.java:241)
   at org.alfresco.repo.search.SearcherComponent.query(SearcherComponent.java:67)
   at org.alfresco.repo.search.AbstractSearcherComponent.query(AbstractSearcherComponent.java:53)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
   at net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:80)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:44)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.alfresco.repo.audit.AuditMethodInterceptor.proceedWithAudit(AuditMethodInterceptor.java:217)
   at org.alfresco.repo.audit.AuditMethodInterceptor.proceed(AuditMethodInterceptor.java:184)
   at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:137)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
19 nov. 2010 16:48:50 org.apache.catalina.core.StandardContext start
GRAVE: Error listenerStart
19 nov. 2010 16:48:50 org.apache.catalina.core.StandardContext start
GRAVE: Erreur de démarrage du contexte [/alfresco] suite aux erreurs précédentes

J'ai modifié le fichier ctl.sh en reprenant la syntaxe de rguinot (/opt/alfresco/alf/tomcat/scripts/ctl.sh)

#!/bin/sh

CATALINA_HOME=/opt/alfresco/alf/tomcat
TOMCAT_BINDIR=/opt/alfresco/alf/tomcat/bin
JRE_HOME=/opt/alfresco/alf/java
CATALINA_PID=/opt/alfresco/alf/tomcat/temp/catalina.pid
export CATALINA_PID
TOMCAT_STATUS=""
ERROR=0


start_tomcat() {
    export JAVA_OPTS="-XX:PermSize=512m -XX:MaxPermSize=512m -Xms512m -Xmx512m -Dalfresco.home=/opt/alfresco/alf -Dcom.sun.management.jmxremote"
    export JAVA_HOME=$JRE_HOME
    $TOMCAT_BINDIR/startup.sh

    if [ $? -eq 0 ];  then
        echo "$0 $ARG: tomcat started"
    else
        echo "$0 $ARG: tomcat could not be started"
        ERROR=1
    fi
}

daemon_tomcat() {
    export JAVA_OPTS="-XX:PermSize=512m -XX:MaxPermSize=512m -Xms512m -Xmx512m -Dalfresco.home=/opt/alfresco/alf -Dcom.sun.management.jmxremote"
    export JAVA_HOME=$JRE_HOME
    $TOMCAT_BINDIR/catalina.sh run
}

Ce que j'obtiens lors du démarrage d'Alfresco :

[code]Using CATALINA_BASE:   /opt/alfresco/alf/tomcat
Using CATALINA_HOME:   /opt/alfresco/alf/tomcat
Using CATALINA_TMPDIR: /opt/alfresco/alf/tomcat/temp
Using JRE_HOME:        /opt/alfresco/alf/java
Using CLASSPATH:       /opt/alfresco/alf/tomcat/bin/bootstrap.jar
/opt/alfresco/alf/tomcat/scripts/ctl.sh : tomcat started
Je ne vois rien concernant le JAVA_OPTS mais c'est peut être normal?

Je pense que je n'agit pas sur le bon fichier. A quel endroit agir pour augmenter cette permgen.

Merci bien et bon WE.
rguinot
Customer

Re: JVM Heap size

les options de jvm ne sont probablement prises en compte  via votre script custom ….
un moyen de le vérifier serait de passer l'option -XX:+PrintVMOptions directement à coté de l'appel a la commande java et de rediriger la totalité de l'output de la commande java via un tee, example : java …. | tee -a java.log. on verra alors les options effectives. info dispo aussi au runtime via jinfo -flag monflag monlvmid