jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Morrell Jacobs <mjac...@maned.com>
Subject Intermittent Slow Down
Date Mon, 17 Dec 2012 17:04:28 GMT
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: mjacobs@maned.com
AOL IM: MorrellMEI

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




Mime
View raw message