jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stefan Guggisberg (JIRA)" <j...@apache.org>
Subject [jira] Commented: (JCR-2345) Many threads are blocked trying to get lock: org/apache/jackrabbit/core/persistence/bundle/OraclePersistenceManager@0x2b71b2c979c0[fat lock]
Date Wed, 07 Oct 2009 10:17:31 GMT

    [ https://issues.apache.org/jira/browse/JCR-2345?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12762983#action_12762983
] 

Stefan Guggisberg commented on JCR-2345:
----------------------------------------

> 2) But JCR-2186 is about some exception in SISM, right? 

no, it's about an unneccessary 'hastItemState()' call in SessionItemStateManager#getItemState.

i noticed that call on a number of your stack traces. the fix provided in JCR-2186 should
reduce
the pm calls in your scenario significantly, thus reducing potential lock contention. 

i am optimistic that jackrabbit 1.6 will significantly improve performance of concurrent read
operations.

> 3) I have no chance to test it against different backend at the moment. Though we had
used Derby initialy and didn't see similar problems, but that was probably because the load
was much lower at that time. Also as I see from the thread dumps the problem is in the AbstractBundlePesistenceManager
syncronised methods and the fact that there is only one instance of Oracle PM per repository.

per workspace, to be precise ;) read operations are served from the SISM cache. only if the
item is not cahced yet, the call is delegated to the pm. 


>
> 4) Yes, we tried SUN's JDK, and the results are pretty much the same.
>

> Many threads are blocked trying to get lock: org/apache/jackrabbit/core/persistence/bundle/OraclePersistenceManager@0x2b71b2c979c0[fat
lock]
> --------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: JCR-2345
>                 URL: https://issues.apache.org/jira/browse/JCR-2345
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core, JCR 1.0.1
>    Affects Versions: 1.5.5
>         Environment: HP Unix
>            Reporter: Andrey Adamovich
>         Attachments: dump1.txt, dump2.txt, dump3.txt
>
>
> We implemented a multi-threaded export functionlity for our JR repository, but it turns
out that intended parallel behavior can't be achieved becuase most of the threads seemed to
be waiting for OraclePersistenceManager. 
> This is the stack trace for most of the waiting threads:
>     -- Blocked trying to get lock: org/apache/jackrabbit/core/persistence/bundle/OraclePersistenceManager@0x2b71b2c979c0[fat
lock]
>     at jrockit/vm/Threads.waitForUnblockSignal()V(Native Method)
>     at jrockit/vm/Locks.fatLockBlockOrSpin(Locks.java:1675)[optimized]
>     at jrockit/vm/Locks.lockFat(Locks.java:1776)[optimized]
>     at jrockit/vm/Locks.monitorEnterSecondStageHard(Locks.java:1312)[optimized]
>     at jrockit/vm/Locks.monitorEnterSecondStage(Locks.java:1259)[optimized]
>     at org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.exists(AbstractBundlePersistenceManager.java:506)[optimized]
>     at org/apache/jackrabbit/core/state/SharedItemStateManager.hasNonVirtualItemState(SharedItemStateManager.java:1343)[inlined]
>     at org/apache/jackrabbit/core/state/SharedItemStateManager.hasItemState(SharedItemStateManager.java:297)[optimized]
>     at org/apache/jackrabbit/core/state/XAItemStateManager.hasItemState(XAItemStateManager.java:295)[optimized]
>     at org/apache/jackrabbit/core/state/SessionItemStateManager.getItemState(SessionItemStateManager.java:181)[optimized]
>     at org/apache/jackrabbit/core/ItemManager.getItemData(ItemManager.java:282)[inlined]
>     at org/apache/jackrabbit/core/ItemManager.getItemData(ItemManager.java:249)[inlined]
>     at org/apache/jackrabbit/core/ItemManager.getNode(ItemManager.java:513)[inlined]
>     at org/apache/jackrabbit/core/LazyItemIterator.prefetchNext(LazyItemIterator.java:109)[inlined]
>     at org/apache/jackrabbit/core/LazyItemIterator.next(LazyItemIterator.java:230)[inlined]
>     at org/apache/jackrabbit/core/LazyItemIterator.nextNode(LazyItemIterator.java:137)[optimized]
>     ^-- Holding lock: org/apache/jackrabbit/core/ItemManager@0x2b71ec068f58[thin lock]
>     at org/apache/jackrabbit/commons/xml/Exporter.exportNodes(Exporter.java:212)[optimized]
>     at org/apache/jackrabbit/commons/xml/DocumentViewExporter.exportNode(DocumentViewExporter.java:77)[inlined]
>     at org/apache/jackrabbit/commons/xml/Exporter.exportNode(Exporter.java:294)[inlined]
>     at org/apache/jackrabbit/commons/xml/Exporter.export(Exporter.java:143)[optimized]
>     at org/apache/jackrabbit/commons/AbstractSession.export(AbstractSession.java:462)[inlined]
>     at org/apache/jackrabbit/commons/AbstractSession.exportDocumentView(AbstractSession.java:236)[inlined]
>     at org/apache/jackrabbit/commons/AbstractSession.exportDocumentView(AbstractSession.java:281)[optimized]
>     ^-- Holding lock: org/apache/jackrabbit/core/XASessionImpl@0x2b71ec068950[thin lock]
> This is the stack trace for blocking thread:
>     at jrockit/net/SocketNativeIO.readBytesPinned(Ljava/io/FileDescriptor;[BIII)I(Native
Method)
>     at jrockit/net/SocketNativeIO.socketRead(SocketNativeIO.java:46)[optimized]
>     at java/net/SocketInputStream.socketRead0(Ljava/io/FileDescriptor;[BIII)I(SocketInputStream.java)[inlined]
>     at java/net/SocketInputStream.read(SocketInputStream.java:129)[optimized]
>     at oracle/net/ns/Packet.receive()V(Unknown Source)[inlined]
>     at oracle/net/ns/DataPacket.receive()V(Unknown Source)[optimized]
>     at oracle/net/ns/NetInputStream.getNextPacket()V(Unknown Source)[optimized]
>     at oracle/net/ns/NetInputStream.read([BII)I(Unknown Source)[inlined]
>     at oracle/net/ns/NetInputStream.read([B)I(Unknown Source)[inlined]
>     at oracle/net/ns/NetInputStream.read()I(Unknown Source)[optimized]
>     at oracle/jdbc/driver/T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1104)[inlined]
>     at oracle/jdbc/driver/T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1075)[inlined]
>     at oracle/jdbc/driver/T4C8TTILob.receiveReply(T4C8TTILob.java:872)[optimized]
>     at oracle/jdbc/driver/T4C8TTILob.getChunkSize(T4C8TTILob.java:329)[inlined]
>     at oracle/jdbc/driver/T4CConnection.getChunkSize(T4CConnection.java:2026)[optimized]
>     ^-- Holding lock: oracle/jdbc/driver/T4CConnection@0x2b71b2ce0650[thin lock]
>     at oracle/sql/BLOB.getChunkSize(BLOB.java:389)[inlined]
>     at oracle/sql/BLOB.getBufferSize(BLOB.java:410)[inlined]
>     at oracle/sql/BLOB.getBinaryStream(BLOB.java:229)[optimized]
>     at org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.getBytes(BundleDbPersistenceManager.java:1110)[inlined]
>     at org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.loadBundle(BundleDbPersistenceManager.java:1142)[inlined]
>     at org/apache/jackrabbit/core/persistence/bundle/BundleDbPersistenceManager.loadBundle(BundleDbPersistenceManager.java:1094)[inlined]
>     at org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.getBundle(AbstractBundlePersistenceManager.java:701)[inlined]
>     at org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.exists(AbstractBundlePersistenceManager.java:506)[optimized]
>     ^-- Holding lock: org/apache/jackrabbit/core/persistence/bundle/OraclePersistenceManager@0x2b71b2c979c0[fat
lock]
>     at org/apache/jackrabbit/core/state/SharedItemStateManager.hasNonVirtualItemState(SharedItemStateManager.java:1343)[inlined]
>     at org/apache/jackrabbit/core/state/SharedItemStateManager.hasItemState(SharedItemStateManager.java:297)[optimized]
>     at org/apache/jackrabbit/core/state/XAItemStateManager.hasItemState(XAItemStateManager.java:295)[optimized]
>     at org/apache/jackrabbit/core/state/SessionItemStateManager.getItemState(SessionItemStateManager.java:181)[optimized]
>     at org/apache/jackrabbit/core/ItemManager.getItemData(ItemManager.java:282)[inlined]
>     at org/apache/jackrabbit/core/ItemManager.getItemData(ItemManager.java:249)[inlined]
>     at org/apache/jackrabbit/core/ItemManager.getNode(ItemManager.java:513)[inlined]
>     at org/apache/jackrabbit/core/LazyItemIterator.prefetchNext(LazyItemIterator.java:109)[inlined]
>     at org/apache/jackrabbit/core/LazyItemIterator.next(LazyItemIterator.java:230)[inlined]
>     at org/apache/jackrabbit/core/LazyItemIterator.nextNode(LazyItemIterator.java:137)[optimized]
>     ^-- Holding lock: org/apache/jackrabbit/core/ItemManager@0x2b71dcf8c668[thin lock]
>     at org/apache/jackrabbit/commons/xml/Exporter.exportNodes(Exporter.java:212)[optimized]
>     at org/apache/jackrabbit/commons/xml/DocumentViewExporter.exportNode(DocumentViewExporter.java:77)[inlined]
>     at org/apache/jackrabbit/commons/xml/Exporter.exportNode(Exporter.java:294)[inlined]
>     at org/apache/jackrabbit/commons/xml/Exporter.export(Exporter.java:143)[optimized]
>     at org/apache/jackrabbit/commons/AbstractSession.export(AbstractSession.java:462)[inlined]
>     at org/apache/jackrabbit/commons/AbstractSession.exportDocumentView(AbstractSession.java:236)[inlined]
>     at org/apache/jackrabbit/commons/AbstractSession.exportDocumentView(AbstractSession.java:281)[optimized]
>     ^-- Holding lock: org/apache/jackrabbit/core/XASessionImpl@0x2b71dcf8c3c0[thin lock]
> Oracle database performfs as usual. So, I doubt that it is an Oracle problem. In any
case is there any way to avoid other threads blocking each other while performing read operations
from PM?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message