[ 
https://issues.apache.org/jira/browse/SPARK-15059?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15267894#comment-15267894
 ] 

Apache Spark commented on SPARK-15059:
--------------------------------------

User 'tankkyo' has created a pull request for this issue:
https://github.com/apache/spark/pull/12857

> Fine-grained class loader lock in ChildFirstURLClassLoader caused dead locks
> ----------------------------------------------------------------------------
>
>                 Key: SPARK-15059
>                 URL: https://issues.apache.org/jira/browse/SPARK-15059
>             Project: Spark
>          Issue Type: Bug
>          Components: Spark Core
>    Affects Versions: 1.5.1, 1.5.2
>            Reporter: Zheng Tan
>
> Two threads in executors are locked by each other when loading the same class 
> concurrently using ChildFirstURLClassLoader. This bug can be reproduced in 
> our product environment(1.5.1). 
> Here is our java thread dump information:
> Found one Java-level deadlock:
> =============================
> "Timer-3":
>   waiting to lock monitor 0x00007f5a0c01f598 (object 0x00000005947cead0, a 
> org.apache.spark.util.ChildFirstURLClassLoader),
>   which is held by "pool-15-thread-7"
> "pool-15-thread-7":
>   waiting to lock monitor 0x00007f5a0c01f4e8 ({color:red}object 
> 0x000000059b5fe8d8, a java.lang.Object{color}),
>   which is held by "pool-16-thread-5"
> "pool-16-thread-5":
>   waiting to lock monitor 0x00007f5a0c01f598 ({color:red}object 
> 0x00000005947cead0, a org.apache.spark.util.ChildFirstURLClassLoader{color}),
>   which is held by "pool-15-thread-7"
> Java stack information for the threads listed above:
> ===================================================
> "Timer-3":
>         at 
> com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:980)
>         at 
> com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1406)
>         at 
> com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1378)
>         at 
> com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1462)
>         at 
> com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:32)
>         at 
> com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:1937)
>         - locked <0x000000059b5dd938> (a 
> com.mchange.v2.resourcepool.BasicResourcePool)
>         at java.util.TimerThread.mainLoop(Timer.java:555)
>         at java.util.TimerThread.run(Timer.java:505)
> "pool-15-thread-7":
>         at 
> org.apache.spark.util.ChildFirstURLClassLoader.loadClass(MutableURLClassLoader.scala:71)
>         - waiting to lock <0x000000059b5fe8d8> (a java.lang.Object)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:270)
>         at com.sun.beans.finder.ClassFinder.findClass(ClassFinder.java:67)
>         at com.sun.beans.finder.ClassFinder.findClass(ClassFinder.java:110)
>         at 
> com.sun.beans.finder.InstanceFinder.instantiate(InstanceFinder.java:93)
>         at com.sun.beans.finder.InstanceFinder.find(InstanceFinder.java:66)
>         at java.beans.Introspector.findExplicitBeanInfo(Introspector.java:438)
>         at java.beans.Introspector.<init>(Introspector.java:388)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:163)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:250)
>         at java.beans.Introspector.<init>(Introspector.java:397)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:163)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptors(PropertyUtilsBean.java:971)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptors(PropertyUtilsBean.java:1075)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:903)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1310)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
>         at 
> org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
>         at 
> com.hulu.recommendation.datastore.impl.table.Indexing.getKey(Indexing.java:255)
>         at 
> com.hulu.recommendation.datastore.impl.table.Indexing.indexIntoMap(Indexing.java:183)
>         at 
> com.hulu.recommendation.datastore.impl.table.Indexing.indexIntoMap(Indexing.java:179)
>         at 
> com.hulu.recommendation.datastore.impl.table.Indexing.createIndexInBatch(Indexing.java:86)
>         at 
> com.hulu.recommendation.datastore.impl.table.TableHolder.loadItemInBatch(TableHolder.java:268)
>         at 
> com.hulu.recommendation.datastore.impl.table.TableHolder.loadDataIncrementallyByFieldOrPk(TableHolder.java:214)
>         at 
> com.hulu.recommendation.datastore.impl.table.TableHolder.loadDataIncrementallyByFieldOrPk(TableHolder.java:153)
>         at 
> com.hulu.recommendation.datastore.impl.table.TableHolder.loadDataInitially(TableHolder.java:121)
>         - locked <0x000000059b6864b8> (a 
> com.hulu.recommendation.datastore.impl.table.TableHolder)
>         at 
> com.hulu.recommendation.datastore.impl.table.TableHolder.loadDataInitially(TableHolder.java:106)
>         at 
> com.hulu.recommendation.datastore.impl.table.TableHolder.loadData(TableHolder.java:369)
>         at 
> com.hulu.recommendation.datastore.BaseDataHolder.confirmDataLoaded(BaseDataHolder.java:25)
>         - locked <0x000000059b6864b8> (a 
> com.hulu.recommendation.datastore.impl.table.TableHolder)
>         at 
> com.hulu.recommendation.datastore.BaseDataHolder.initialize(BaseDataHolder.java:39)
>         at 
> com.hulu.recommendation.datastore.DataComponentUtils$1.call(DataComponentUtils.java:17)
>         at 
> com.hulu.recommendation.datastore.DataComponentUtils$1.call(DataComponentUtils.java:14)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>         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:745)
> "pool-16-thread-5":
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:405)
>         - waiting to lock <0x00000005947cead0> (a 
> org.apache.spark.util.ChildFirstURLClassLoader)
>         at 
> org.apache.spark.util.ChildFirstURLClassLoader.liftedTree1$1(MutableURLClassLoader.scala:72)
>         at 
> org.apache.spark.util.ChildFirstURLClassLoader.loadClass(MutableURLClassLoader.scala:71)
>         - locked <0x000000059b5fe8d8> (a java.lang.Object)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
>         - locked <0x00000005948408d8> (a org.openejb.util.MemoryClassLoader)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:270)
>         at com.sun.beans.finder.ClassFinder.findClass(ClassFinder.java:103)
>         at 
> com.sun.beans.finder.InstanceFinder.instantiate(InstanceFinder.java:93)
>         at com.sun.beans.finder.InstanceFinder.find(InstanceFinder.java:66)
>         at java.beans.Introspector.findExplicitBeanInfo(Introspector.java:438)
>         at java.beans.Introspector.<init>(Introspector.java:388)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:163)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:250)
>         at java.beans.Introspector.<init>(Introspector.java:397)
>         at java.beans.Introspector.getBeanInfo(Introspector.java:163)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptors(PropertyUtilsBean.java:971)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptors(PropertyUtilsBean.java:1075)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getPropertyDescriptor(PropertyUtilsBean.java:903)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1310)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762)
>         at 
> org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837)
>         at 
> org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426)
> ......
>         at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>         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:745)
> Found 1 deadlock.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org

Reply via email to