Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 15/04/2011 16:15:21

fred.ravetier
Guest
From: Toulouse
Registered: 12/08/2010
Posts: 34
Website

Too many open files

Voici l'erreur que nous avons rencontré:

home/cms/Ametys_CMS/application/v1_0_1/cms/WEB-INF/data/administrator/system.xml (Too many open files)

java.io.FileNotFoundException: /home/cms/Ametys_CMS/application/v1_0_1/cms/WEB-INF/data/administrator/system.xml (Too many open files)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at org.ametys.runtime.plugins.core.administrator.system.SystemHelper.isSystemAnnouncementAvailable(SystemHelper.java:59)
at org.ametys.runtime.plugins.core.administrator.system.SystemAnnouncementGenerator.generate(SystemAnnouncementGenerator.java:49)
at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:579)
at org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(AbstractCachingProcessingPipeline.java:280)
at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.process(AbstractProcessingPipeline.java:481)
at org.apache.cocoon.components.source.impl.SitemapSource.getInputStream(SitemapSource.java:267)
at org.ametys.runtime.plugins.core.dispatcher.DispatchGenerator._dispatching(DispatchGenerator.java:137)
at org.ametys.runtime.plugins.core.dispatcher.DispatchGenerator.generate(DispatchGenerator.java:89)
at org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.processXMLPipeline(AbstractProcessingPipeline.java:579)
at org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.processXMLPipeline(Ab
...

Voici la solution:
Il faut augmenter le nombre max de fichiers ouverts

Il faut mettre dans le fichier /etc/security/limits.conf

* - nofile 20000
root - nofile 20000

A savoir que "-" contient hard et soft

Puis il faut faire un restart complet.
Et redémarrer tomcat après le restart système car la modification n'est pas prise en compte lorsque tomcat démarre en même temps que le serveur. Si quelqu'un à la solution, je suis preneur.

Pour savoir la valeur utilisée par le CMS:
Créer un fichier /tmp/test.sh

ulimit -n >> /tmp/test.log

Lorsqu'on execute le script nous devons avoir 20000 dans /tmp/test.log

Dans la console JCR (http://xxxxx/_repository/index.html)

var p = Packages.java.lang.Runtime.getRuntime().exec("/tmp/test.sh");
var s = p.waitFor();

println(org.apache.commons.io.IOUtils.toString(p.getErrorStream()));
println(org.apache.commons.io.IOUtils.toString(p.getInputStream()));

En executant le script dans l'environnement de tomcat on peut connaitre la valeur utilisée. Normalement dans le fichier /tmp/test.log on obtient 20000. Si on obtient autre chose (1024) c'est que la modification n'est pas utilisée par Tomcat.

Offline

#2 06/09/2012 09:55:08

fred.ravetier
Guest
From: Toulouse
Registered: 12/08/2010
Posts: 34
Website

Re: Too many open files

Quelques informations complémentaires

# cat /proc/sys/fs/file-nr
3391    969     52427
|        |       |
|        |       |
|        |       maximum open file descriptors
|        total free allocated file descriptors
total allocated file descriptors
(the number of file descriptors allocated since boot)

Offline

#3 06/09/2012 10:25:45

fred.ravetier
Guest
From: Toulouse
Registered: 12/08/2010
Posts: 34
Website

Re: Too many open files

Pour connaitre les fichiers ouverts par un process :

lsof -p <Java PID>

Pour obtenir le nombre de fichiers ouverts:

lsof -p <Java PID> | wc –l

Pour connaitre le PID des process java:

ps -f | grep java

Pour extraire le PID: (dans le cas ou il y a un seul process java, sinon il faut modifier le grep)

ps -e | grep java | cut -f1 -d ' '

Sinon voici une autre solution:

PROCESS_NAME="tomcat-cms"
ps -ef | grep java | grep ${PROCESS_NAME} | cut -c10-14

Last edited by fred.ravetier (07/09/2012 09:12:43)

Offline

Board footer

Powered by FluxBB