Hello all,

We're currently experience a problem where JackRabbit function will 
occasionally slow down; according to our QA, the slow down comes in waves: good 
performance for a while (hours) then bad for a while (minutes / hours).  The 
slow down is on the order of minutes to perform create or modify an object 
(creation involves creating a 2-3 levels of nodes, and setting properties).  
Normally these operations take 100 - 300 ms, but during the slow down they can 
take as much 5 minutes.

The slow down does not seem to be connected to the load on the server: we've 
seen it perform well, when many people are connecting, then slow down with only 
one user.  I suspect the slow down is related to indexing, but that's just a 
guess on my part - I'm looking for something that would happen at some interval.


Environment:
* JackRabbit is built into war running in Tomcat (was 7.0.25, recently upgraded 
to 7.0.34)
* Tomcat was running with default configs but recently up'd memory - -Xms128M 
-Xmx512M -XX:MaxPermSize=256M
* Repository XML is at end of email
* JackRabbit was originally configured to be clustered, but is now running as 
just a single instance.


Data:
* Our data is structured similar to a file system, except any object can be 
both a file and contain other objects (files); each object has various metadata 
(some in properties, some in child nodes), a file and child objects
* We don't use full text searching and don't want file (binary) contents 
indexed; the only way I was able to prevent the search index from examining the 
files (some are large 100+ M) was to create my own node types for files.  My 
node types are identical nt:file and nt:content, except that they are named 
prd:file and prd:content; the unrecognized name seems to prevent indexing from 
touch them.


When I've attempted to use profiling tools, it appears that during the slow 
down the CPU is pegged; memory usage is also at or close to the limit.  In 
depth profiling tools (NetBeans) get overwhelmed during the slow down.

We're going thru a variety of tests, but any advice the community can provide 
will be greatly appreciated.

Here's the repository.xml:
<Repository>
    <FileSystem class="org.apache.jackrabbit.core.fs.db.DbFileSystem">
        <param name="driver" value="com.mysql.jdbc.Driver"/>
        <param name="url" 
value="jdbc:mysql://${pm.database.url}:${pm.database.port}/${pm.database.prefix}global_repository?autoReconnect=true&amp;createDatabaseIfNotExist=true"/>
        <param name="schema" value="mysql"/>
        <param name="schemaObjectPrefix" value="rep_"/>
        <param name="user" value="${pm.database.user}"/>
        <param name="password" value="${pm.database.pwd}"/>
    </FileSystem>

    <!--
        security configuration
    -->
    <Security appName="Jackrabbit">
        <!--
            security manager:
            class: FQN of class implementing the JackrabbitSecurityManager 
interface
        -->
        <SecurityManager 
class="org.apache.jackrabbit.core.DefaultSecurityManager" 
workspaceName="default">
            <!--
                workspace access:
                class: FQN of class implementing the WorkspaceAccessManager 
interface
            -->
            <!-- <WorkspaceAccessManager class="..."/> -->
            <!-- <param name="config" value="${rep.home}/security.xml"/> -->
        </SecurityManager>
        <!--
            access manager:
            class: FQN of class implementing the AccessManager interface
        -->
        <AccessManager 
class="org.apache.jackrabbit.core.security.DefaultAccessManager">
            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
        </AccessManager>
        
        <LoginModule 
class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
            <!-- 
                anonymous user name ('anonymous' is the default value)
            -->
            <param name="anonymousId" value="anonymous"/>
            <!--
                administrator user id (default value if param is missing is 
'admin')
            -->
            <param name="adminId" value="admin"/>
        </LoginModule>
    </Security>
    
    <!--
        location of workspaces root directory and name of default workspace
    -->
    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
    
    <!--
        workspace configuration template:
        used to create the initial workspace if there's no workspace yet
    -->
<!--    <Workspace name="default">-->
    <Workspace name="default">
        <!--
            virtual file system of the workspace:
            class: FQN of class implementing the FileSystem interface
        -->
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${wsp.home}"/>
        </FileSystem>
        <!--
            persistence manager of the workspace:
            class: FQN of class implementing the PersistenceManager interface
        -->
        <PersistenceManager 
class="org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager">
            <param name="driver" value="com.mysql.jdbc.Driver"/>
            <param name="url" 
value="jdbc:mysql://${pm.database.url}:${pm.database.port}/${pm.database.prefix}product?createDatabaseIfNotExist=true"/>
            <param name="user" value="${pm.database.user}"/>
            <param name="password" value="${pm.database.pwd}"/>
            <param name="schemaObjectPrefix" value="Product_"/>
            <param name="schema" value="mysql"/>
        </PersistenceManager>
        <!--
            Search index and the file system it uses.
            class: FQN of class implementing the QueryHandler interface
        -->
        <SearchIndex 
class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
            <param name="path" value="${wsp.home}/index"/>
            <!--<param name="textFilterClasses"
                
value="org.apache.jackrabbit.extractor.PlainTextExtractor,org.apache.jackrabbit.extractor.MsWordTextExtractor,org.apache.jackrabbit.extractor.MsExcelTextExtractor,org.apache.jackrabbit.extractor.MsPowerPointTextExtractor,org.apache.jackrabbit.extractor.PdfTextExtractor,org.apache.jackrabbit.extractor.OpenOfficeTextExtractor,org.apache.jackrabbit.extractor.RTFTextExtractor,org.apache.jackrabbit.extractor.HTMLTextExtractor,org.apache.jackrabbit.extractor.XMLTextExtractor"/>
            <param name="extractorPoolSize" value="2"/>
            <param name="supportHighlighting" value="true"/> -->
        </SearchIndex>
    </Workspace>
    
    <!--
        Configures the versioning
    -->
    <Versioning rootPath="${rep.home}/version">
        <!--
            Configures the filesystem to use for versioning for the respective
            persistence manager
        -->
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${rep.home}/version"/>
        </FileSystem>
        <!--
            Configures the persistence manager to be used for persisting 
version state.
            Please note that the current versioning implementation is based on
            a 'normal' persistence manager, but this could change in future
            implementations.
        -->
        <PersistenceManager 
class="org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager">
            <param name="driver" value="com.mysql.jdbc.Driver"/>
            <param name="url" 
value="jdbc:mysql://${pm.database.url}:${pm.database.port}/${pm.database.prefix}truedit_versions?createDatabaseIfNotExist=true"/>
            <param name="user" value="${pm.database.user}"/>
            <param name="password" value="${pm.database.pwd}"/>
            <param name="schemaObjectPrefix" value="version_"/>
            <param name="schema" value="mysql"/>
        </PersistenceManager>
    </Versioning>
    
    <!--
        Configures the Data Store for large binary objects.
    -->   
    <DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
        <param name="path" value="${datastore.location.path}"/>
        <param name="minRecordLength" value="100"/>
    </DataStore>
    <!--
    <Cluster id="${cluster.id}" syncDelay="2000">
        <Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal">
            <param name="driver" value="com.mysql.jdbc.Driver" />
            <param name="url" 
value="jdbc:mysql://${pm.database.url}:${pm.database.port}/${pm.database.prefix}journal?autoReconnect=true&amp;createDatabaseIfNotExist=true"/>
            <param name="schemaObjectPrefix" value="journal_"/>
            <param name="databaseType" value="mysql"/>
            <param name="user" value="${pm.database.user}"/>
            <param name="password" value="${pm.database.pwd}"/>
        </Journal>
    </Cluster>
    -->

</Repository>



--
Morrell Jacobs
Chief Software Architect
MEI
610 Old York Road, Suite 250
Jenkintown, PA 19046
Phone: 215-886-5662, ext. 252
Fax: 215-886-5681
http://www.maned.com 
E-mail: [email protected]
AOL IM: MorrellMEI

Have you seen Nervous Pixel, MEI's creative services division?
www.nervouspixel.com



Reply via email to