Issue #837 has been updated by Clément OUDOT.

Status changed from New to Assigned
Assigned to changed from Clément OUDOT to Raphaël Ouazana

Thanks for the patch.
----------------------------------------
Bug #837: scriptInclude causes LSC to run out of filedescriptors
http://tools.lsc-project.org/issues/837

Author: Harald Strack
Status: Assigned
Priority: Normal
Assigned to: Raphaël Ouazana
Category: Core
Target version: 2.2
Problem in version: 2.1, 2.2


h2. Problem 

* When running LSC highly threaded and with > 200000 Accounts, it runs out of 
filedescriptors

<pre>
Jul 23 17:54:54 - ERROR - java.io.FileNotFoundException: 
/etc/lscprovision/lib.js (Too many open files)
Jul 23 17:54:54 - DEBUG - java.io.FileNotFoundException: 
/etc/lscprovision/lib.js (Too many open files)
java.io.FileNotFoundException: /etc/lscprovision/lib.js (Too many open files)
        at java.io.FileInputStream.open(Native Method) ~[na:1.7.0_71]
        at java.io.FileInputStream.<init>(FileInputStream.java:146) 
~[na:1.7.0_71]
        at java.io.FileReader.<init>(FileReader.java:72) ~[na:1.7.0_71]
        at 
org.lsc.utils.JScriptEvaluator.instanceEval(JScriptEvaluator.java:299) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
org.lsc.utils.JScriptEvaluator.evalToString(JScriptEvaluator.java:102) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
org.lsc.utils.ScriptingEvaluator.evalToString(ScriptingEvaluator.java:129) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at org.lsc.beans.BeanComparator.cloneSrcBean(BeanComparator.java:531) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
org.lsc.beans.BeanComparator.calculateModifications(BeanComparator.java:158) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:808) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:742) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
[na:1.7.0_71]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
[na:1.7.0_71]
        at java.lang.Thread.run(Thread.java:745) [na:1.7.0_71]
Jul 23 17:54:54 - ERROR - Error while synchronizing ID {uid=00872908X20}: 
java.lang.RuntimeException: No DN set! Read it from the source or set 
lsc.tasks.NAME.d
n
Jul 23 17:54:54 - DEBUG - java.lang.RuntimeException: No DN set! Read it from 
the source or set lsc.tasks.NAME.dn
java.lang.RuntimeException: No DN set! Read it from the source or set 
lsc.tasks.NAME.dn
        at org.lsc.beans.BeanComparator.getDstDN(BeanComparator.java:206) 
~[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
org.lsc.beans.BeanComparator.calculateModifications(BeanComparator.java:172) 
~[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:808) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:742) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
[na:1.7.0_71]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
[na:1.7.0_71]
        at java.lang.Thread.run(Thread.java:745) [na:1.7.0_71]
Jul 23 17:54:54 - ERROR - java.io.FileNotFoundException: 
/etc/lscprovision/lib.js (Too many open files)
Jul 23 17:54:54 - DEBUG - java.io.FileNotFoundException: 
/etc/lscprovision/lib.js (Too many open files)
java.io.FileNotFoundException: /etc/lscprovision/lib.js (Too many open files)
        at java.io.FileInputStream.open(Native Method) ~[na:1.7.0_71]
        at java.io.FileInputStream.<init>(FileInputStream.java:146) 
~[na:1.7.0_71]
        at java.io.FileReader.<init>(FileReader.java:72) ~[na:1.7.0_71]
        at 
org.lsc.utils.JScriptEvaluator.instanceEval(JScriptEvaluator.java:299) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
org.lsc.utils.JScriptEvaluator.evalToString(JScriptEvaluator.java:102) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
org.lsc.utils.ScriptingEvaluator.evalToString(ScriptingEvaluator.java:129) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at org.lsc.beans.BeanComparator.cloneSrcBean(BeanComparator.java:531) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
org.lsc.beans.BeanComparator.calculateModifications(BeanComparator.java:158) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:808) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at org.lsc.SynchronizeTask.run(AbstractSynchronize.java:742) 
[lsc-core-2.2trunk-SSYSTEMS.jar:na]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
[na:1.7.0_71]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
[na:1.7.0_71]
        at java.lang.Thread.run(Thread.java:745) [na:1.7.0_71]
</pre>

* LSC closes the open file handles after a while, but too slowly to avoid 
running out of FDs

<pre>
java    7070 root 1614r   REG              253,0      3655  526044 
/etc/lscprovision/lib.js
java    7070 root 1615r   REG              253,0      3655  526044 
/etc/lscprovision/lib.js
java    7070 root 1616r   REG              253,0      3655  526044 
/etc/lscprovision/lib.js
java    7070 root 1617r   REG              253,0      3655  526044 
/etc/lscprovision/lib.js
java    7070 root 1618r   REG              253,0      3655  526044 
/etc/lscprovision/lib.js
java    7070 root 1619r   REG              253,0      3655  526044 
/etc/lscprovision/lib.js
java    7070 root 1620r   REG              253,0      3655  526044 
/etc/lscprovision/lib.js
java    7070 root 1686r   REG              253,0      3655  526044 
/etc/lscprovision/lib.js
[root@springfield ~]# lsof -p 7070 | wc -l
1635
[root@springfield ~]# lsof -p 7070 | wc -l
1666
[root@springfield ~]# lsof -p 7070 | wc -l
1709
[root@springfield ~]# lsof -p 7070 | wc -l
1678
[root@springfield ~]# lsof -p 7070 | wc -l
1766
[root@springfield ~]# lsof -p 7070 | wc -l
1838
[root@springfield ~]# lsof -p 7070 | wc -l
2206
[root@springfield ~]# lsof -p 7070 | wc -l
2254
</pre>

h2. Solution

* We have to close the @FileReader@ that reads the scripting libs directly 
after evaluation
* According to 
http://www.java2s.com/Code/JavaAPI/javax.script/ScriptEngineevalReaderreader.htm,
 the @FileReader@ has to be closed outside the Scritping Engine


Patch proposal attached




-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://tools.lsc-project.org/my/account
_______________________________________________________________
Ldap Synchronization Connector (LSC) - http://lsc-project.org

lsc-dev mailing list
[email protected]
http://lists.lsc-project.org/listinfo/lsc-dev

Reply via email to