jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrey Adamovich (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 09:59:31 GMT

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

Andrey Adamovich commented on JCR-2345:
---------------------------------------

1) No, we haven't used 1.6, but as far as I noticed from the code nothing really changed in
bundle db pm implementations from version 1.5.5 till 1.6.0 (correct me if I'm wrong) and PM
is still kind of a singleton, that's why we are seeing those locking issues. 

2) But JCR-2186 is about some exception in SISM, right? We are not seeing any exceptions,
but just a lot of stuck threads. But, of course, we can give a try for 1.6 upgrade.

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.

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