Class CmsMemoryMonitor

  • All Implemented Interfaces:
    I_CmsScheduledJob

    public class CmsMemoryMonitor
    extends java.lang.Object
    implements I_CmsScheduledJob
    Monitors OpenCms memory consumption.

    The memory monitor also provides all kind of caches used in the OpenCms core.

    Since:
    6.0.0
    • Constructor Detail

      • CmsMemoryMonitor

        public CmsMemoryMonitor()
        Empty constructor, required by OpenCms scheduler.

    • Method Detail

      • createLRUCacheMap

        public static <T,​V> java.util.Map<T,​V> createLRUCacheMap​(int capacity)
        Creates a thread safe LRU cache map based on the guava cache builder.

        Use this instead of synchronized maps for better performance.

        Parameters:
        capacity - the cache capacity
        Returns:
        the cache map
      • getMemorySize

        public static int getMemorySize​(java.lang.Object obj)
        Returns the size of objects that are instances of byte[], String, CmsFile,I_CmsLruCacheObject.

        For other objects, a size of 0 is returned.

        Parameters:
        obj - the object
        Returns:
        the size of the object
      • getValueSize

        public static long getValueSize​(java.util.List<?> listValue,
                                        int depth)
        Returns the total value size of a list object.

        Parameters:
        listValue - the list object
        depth - the max recursion depth for calculation the size
        Returns:
        the size of the list object
      • getValueSize

        public static long getValueSize​(java.util.Map<?,​?> mapValue,
                                        int depth)
        Returns the total value size of a map object.

        Parameters:
        mapValue - the map object
        depth - the max recursion depth for calculation the size
        Returns:
        the size of the map object
      • getValueSize

        public static long getValueSize​(java.lang.Object obj)
        Returns the value sizes of value objects within the monitored object.

        Parameters:
        obj - the object
        Returns:
        the value sizes of value objects or "-"-fields
      • cacheACL

        public void cacheACL​(java.lang.String key,
                             CmsAccessControlList acl)
        Caches the given acl under the given cache key.

        Parameters:
        key - the cache key
        acl - the acl to cache
      • cacheContentDefinition

        public void cacheContentDefinition​(java.lang.String key,
                                           CmsXmlContentDefinition contentDefinition)
        Caches the given content definition under the given cache key.

        Parameters:
        key - the cache key
        contentDefinition - the content definition to cache
      • cacheGroup

        public void cacheGroup​(CmsGroup group)
        Caches the given group under its id AND fully qualified name.

        Parameters:
        group - the group to cache
      • cacheLocale

        public void cacheLocale​(java.lang.String key,
                                java.util.Locale locale)
        Caches the given locale under the given cache key.

        Parameters:
        key - the cache key
        locale - the locale to cache
      • cacheLock

        public void cacheLock​(CmsLock lock)
        Caches the given lock.

        The lock is cached by it resource's root path.

        Parameters:
        lock - the lock to cache
      • cacheMemObject

        public void cacheMemObject​(java.lang.String key,
                                   java.lang.Object obj)
        Caches the given object under the given cache key.

        Parameters:
        key - the cache key
        obj - the object to cache
      • cacheOrgUnit

        public void cacheOrgUnit​(CmsOrganizationalUnit orgUnit)
        Caches the given organizational under its id AND the fully qualified name.

        Parameters:
        orgUnit - the organizational unit to cache
      • cacheProject

        public void cacheProject​(CmsProject project)
        Caches the given project under its id AND the fully qualified name.

        Parameters:
        project - the project to cache
      • cacheProjectResources

        public void cacheProjectResources​(java.lang.String key,
                                          java.util.List<CmsResource> projectResources)
        Caches the given project resource list under the given cache key.

        Parameters:
        key - the cache key
        projectResources - the project resources to cache
      • cacheProperty

        public void cacheProperty​(java.lang.String key,
                                  CmsProperty property)
        Caches the given property under the given cache key.

        Parameters:
        key - the cache key
        property - the property to cache
      • cachePropertyList

        public void cachePropertyList​(java.lang.String key,
                                      java.util.List<CmsProperty> propertyList)
        Caches the given property list under the given cache key.

        Parameters:
        key - the cache key
        propertyList - the property list to cache
      • cachePublishedResources

        public void cachePublishedResources​(java.lang.String cacheKey,
                                            java.util.List<CmsPublishedResource> publishedResources)
        Caches the given published resources list under the given cache key.

        Parameters:
        cacheKey - the cache key
        publishedResources - the published resources list to cache
      • cacheResource

        public void cacheResource​(java.lang.String key,
                                  CmsResource resource)
        Caches the given resource under the given cache key.

        Parameters:
        key - the cache key
        resource - the resource to cache
      • cacheResourceList

        public void cacheResourceList​(java.lang.String key,
                                      java.util.List<CmsResource> resourceList)
        Caches the given resource list under the given cache key.

        Parameters:
        key - the cache key
        resourceList - the resource list to cache
      • cacheRole

        public void cacheRole​(java.lang.String key,
                              boolean hasRole)
        Caches the given value under the given cache key.

        Parameters:
        key - the cache key
        hasRole - if the user has the given role
      • cacheRoleList

        public void cacheRoleList​(java.lang.String key,
                                  java.util.List<CmsRole> roles)
        Caches the given value under the given cache key.

        Parameters:
        key - the cache key
        roles - the roles of the user
      • cacheUser

        public void cacheUser​(CmsUser user)
        Caches the given user under its id AND the fully qualified name.

        Parameters:
        user - the user to cache
      • cacheUserList

        public void cacheUserList​(java.lang.String key,
                                  java.util.List<CmsUser> userList)
        Caches the given list of users under the given cache key.

        Parameters:
        key - the cache key
        userList - the list of users to cache
      • cacheVfsObject

        public void cacheVfsObject​(java.lang.String key,
                                   java.lang.Object obj)
        Caches the given vfs object under the given cache key.

        Parameters:
        key - the cache key
        obj - the vfs object to cache
      • cacheXmlPermanentEntity

        public void cacheXmlPermanentEntity​(java.lang.String systemId,
                                            byte[] content)
        Caches the given xml entity under the given system id.

        Parameters:
        systemId - the cache key
        content - the content to cache
      • cacheXmlTemporaryEntity

        public void cacheXmlTemporaryEntity​(java.lang.String key,
                                            byte[] content)
        Caches the given xml entity under the given cache key.

        Parameters:
        key - the cache key
        content - the content to cache
      • clearAccessControlListCache

        public void clearAccessControlListCache()
        Clears the access control list cache when access control entries are changed.

      • clearCache

        public void clearCache()
        Clears almost all internal caches.

      • clearPrincipalsCache

        public void clearPrincipalsCache()
        Clears all internal principal-related caches.

      • clearResourceCache

        public void clearResourceCache()
        Clears all the depending caches when a resource was changed.

      • clearUserCache

        public void clearUserCache​(CmsUser user)
        Clears the user cache for the given user.

        Parameters:
        user - the user
      • enabled

        public boolean enabled()
        Returns if monitoring is enabled.

        Returns:
        true if monitoring is enabled
      • flushLocks

        public void flushLocks​(java.util.Map<java.lang.String,​CmsLock> newLocks)
        Flushes the locks cache.

        Parameters:
        newLocks - if not null the lock cache is replaced by the given map
      • flushUserGroups

        public void flushUserGroups​(CmsUUID id)
        Flushes the user group cache for the user with the given id.
        Parameters:
        id - the user id
      • getAllCachedLockPaths

        public java.util.List<java.lang.String> getAllCachedLockPaths()
        Returns all cached lock root paths.

        Returns:
        a list of String objects
      • getCachedACL

        public CmsAccessControlList getCachedACL​(java.lang.String key)
        Returns the ACL cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the ACL cached with the given cache key
      • getCachedContentDefinition

        public CmsXmlContentDefinition getCachedContentDefinition​(java.lang.String key)
        Returns the xml content definition cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the xml content definition cached with the given cache key
      • getCachedGroup

        public CmsGroup getCachedGroup​(java.lang.String key)
        Returns the group cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for, this may be the group's uuid or the fqn
        Returns:
        the group cached with the given cache key
      • getCachedLocale

        public java.util.Locale getCachedLocale​(java.lang.String key)
        Returns the locale cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the locale cached with the given cache key
      • getCachedLock

        public CmsLock getCachedLock​(java.lang.String rootPath)
        Returns the lock cached with the given root path or null if not found.

        Parameters:
        rootPath - the root path to look for
        Returns:
        the lock cached with the given root path
      • getCachedMemObject

        public java.lang.Object getCachedMemObject​(java.lang.String key)
        Returns the memory object cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the memory object cached with the given cache key
      • getCachedOrgUnit

        public CmsOrganizationalUnit getCachedOrgUnit​(java.lang.String key)
        Returns the organizational unit cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for, this may be the organizational unit's uuid or the fqn
        Returns:
        the organizational unit cached with the given cache key
      • getCachedProject

        public CmsProject getCachedProject​(java.lang.String key)
        Returns the project cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for, this may be the project's uuid or the fqn
        Returns:
        the project cached with the given cache key
      • getCachedProjectResources

        public java.util.List<CmsResourcegetCachedProjectResources​(java.lang.String key)
        Returns the project resources list cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the project resources list cached with the given cache key
      • getCachedProperty

        public CmsProperty getCachedProperty​(java.lang.String key)
        Returns the property cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the property cached with the given cache key
      • getCachedPropertyList

        public java.util.List<CmsPropertygetCachedPropertyList​(java.lang.String key)
        Returns the property list cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the property list cached with the given cache key
      • getCachedPublishedResources

        public java.util.List<CmsPublishedResourcegetCachedPublishedResources​(java.lang.String cacheKey)
        Returns the published resources list cached with the given cache key or null if not found.

        Parameters:
        cacheKey - the cache key to look for
        Returns:
        the published resources list cached with the given cache key
      • getCachedPublishJob

        public CmsPublishJobInfoBean getCachedPublishJob​(java.lang.String key)
        Returns the publish job with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the publish job with the given cache key
      • getCachedPublishJobInHistory

        public CmsPublishJobInfoBean getCachedPublishJobInHistory​(java.lang.String key)
        Returns the publish job from the history with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the publish job with the given cache key
      • getCachedResource

        public CmsResource getCachedResource​(java.lang.String key)
        Returns the resource cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the resource cached with the given cache key
      • getCachedResourceList

        public java.util.List<CmsResourcegetCachedResourceList​(java.lang.String key)
        Returns the resource list cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the resource list cached with the given cache key
      • getCachedRole

        public java.lang.Boolean getCachedRole​(java.lang.String key)
        Returns the value cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        if the user has the given role
      • getCachedRoleList

        public java.util.List<CmsRolegetCachedRoleList​(java.lang.String key)
        Returns the value cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        list of roles
      • getCachedUser

        public CmsUser getCachedUser​(java.lang.String key)
        Returns the user cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for, this may be the user's uuid or the fqn
        Returns:
        the user cached with the given cache key
      • getCachedUserGroups

        public java.util.List<CmsGroupgetCachedUserGroups​(CmsUUID userId,
                                                            java.lang.String key)
        Returns the user groups list cached with the given cache key or null if not found.

        Parameters:
        userId - the user id
        key - the cache key to look for
        Returns:
        the user groups list cached with the given cache key
      • getCachedUserList

        public java.util.List<CmsUsergetCachedUserList​(java.lang.String key)
        Returns the user list cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the user groups list cached with the given cache key
      • getCachedVfsObject

        public java.lang.Object getCachedVfsObject​(java.lang.String key)
        Returns the vfs object cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the vfs object cached with the given cache key
      • getCachedXmlPermanentEntity

        public byte[] getCachedXmlPermanentEntity​(java.lang.String systemId)
        Returns the xml permanent entity content cached with the given systemId or null if not found.

        Parameters:
        systemId - the cache key to look for
        Returns:
        the xml permanent entity content cached with the given cache key
      • getCachedXmlTemporaryEntity

        public byte[] getCachedXmlTemporaryEntity​(java.lang.String key)
        Returns the xml temporary entity content cached with the given cache key or null if not found.

        Parameters:
        key - the cache key to look for
        Returns:
        the xml temporary entity content cached with the given cache key
      • getLogCount

        public int getLogCount()
        Returns the log count.

        Returns:
        the log count
      • initialize

        public void initialize​(CmsSystemConfiguration configuration)
        Initializes the monitor with the provided configuration.

        Parameters:
        configuration - the configuration to use
      • isCacheProperty

        @Deprecated
        public boolean isCacheProperty()
        Deprecated.
        Checks if the property cache is enabled.

        Returns:
        true if the property cache is enabled
      • isCachePropertyList

        @Deprecated
        public boolean isCachePropertyList()
        Deprecated.
        Checks if the property list cache is enabled.

        Returns:
        true if the property list cache is enabled
      • isCacheResource

        @Deprecated
        public boolean isCacheResource()
        Deprecated.
        Checks if the resource cache is enabled.

        Returns:
        true if the resource cache is enabled
      • isCacheResourceList

        @Deprecated
        public boolean isCacheResourceList()
        Deprecated.
        Checks if the resource list cache is enabled.

        Returns:
        true if the resource list cache is enabled
      • isEnabled

        public boolean isEnabled​(CmsMemoryMonitor.CacheType type)
        Checks if the given cache is enabled.

        Parameters:
        type - the cache type to check
        Returns:
        true if the given cache is enabled
      • isMonitoring

        public boolean isMonitoring​(java.lang.String key)
        Checks if there is a registered monitored object with the given key.

        Parameters:
        key - the key to look for
        Returns:
        true if there is a registered monitored object with the given key
      • launch

        public java.lang.String launch​(CmsObject cms,
                                       java.util.Map<java.lang.String,​java.lang.String> parameters)
                                throws java.lang.Exception
        Description copied from interface: I_CmsScheduledJob
        This method will be called when this scheduled job is executed.

        Depending on the configuration of this job, a new instance of the configured class will be instantiated every time the job is launched, or a new instance will be generated only the first time the job is launched, and re-used afterwards.

        The result String will be written to the OpenCms logfile in the org.opencms.scheduler.CmsScheduleManager channel, on INFO log level.

        Specified by:
        launch in interface I_CmsScheduledJob
        Parameters:
        cms - will be initialized with the configured users cms context
        parameters - the configured parameters
        Returns:
        a String that will be written to the OpenCms logfile
        Throws:
        java.lang.Exception - if something goes wrong
        See Also:
        I_CmsScheduledJob.launch(CmsObject, Map)
      • lowMemory

        public boolean lowMemory()
        Returns true if the system runs low on memory.

        Returns:
        true if the system runs low on memory
      • register

        public void register​(java.lang.String objectName,
                             java.lang.Object object)
        Adds a new object to the monitor.

        Parameters:
        objectName - name of the object
        object - the object for monitoring
      • requiresPersistency

        public boolean requiresPersistency()
        Checks if some kind of persistence is required.

        This could be overwritten in a distributed environment.

        Returns:
        true if some kind of persistence is required
      • shutdown

        public void shutdown()
                      throws java.lang.Exception
        Flushes all cached objects.

        Throws:
        java.lang.Exception - if something goes wrong
      • uncacheContentDefinition

        public void uncacheContentDefinition​(java.lang.String key)
        Removes the given xml content definition from the cache.

        Parameters:
        key - the cache key to remove from cache
      • uncacheGroup

        public void uncacheGroup​(CmsGroup group)
        Removes the given group from the cache.

        The group is removed by name AND also by uuid.

        Parameters:
        group - the group to remove from cache
      • uncacheLock

        public void uncacheLock​(java.lang.String rootPath)
        Removes the cached lock for the given root path from the cache.

        Parameters:
        rootPath - the root path of the lock to remove from cache
      • uncacheOrgUnit

        public void uncacheOrgUnit​(CmsOrganizationalUnit orgUnit)
        Removes the given organizational unit from the cache.

        The organizational unit is removed by name AND also by uuid.

        Parameters:
        orgUnit - the organizational unit to remove from cache
      • uncacheProject

        public void uncacheProject​(CmsProject project)
        Removes the given project from the cache.

        The project is removed by name AND also by uuid.

        Parameters:
        project - the project to remove from cache
      • uncacheUser

        public void uncacheUser​(CmsUser user)
        Removes the given user from the cache.

        The user is removed by name AND also by uuid.

        Parameters:
        user - the user to remove from cache
      • uncacheVfsObject

        public void uncacheVfsObject​(java.lang.String key)
        Removes the given vfs object from the cache.

        Parameters:
        key - the cache key to remove from cache
      • uncacheXmlTemporaryEntity

        public void uncacheXmlTemporaryEntity​(java.lang.String key)
        Removes the given xml temporary entity from the cache.

        Parameters:
        key - the cache key to remove from cache
      • clearCaches

        protected void clearCaches()
        Clears the OpenCms caches.

      • getCosts

        protected long getCosts​(java.lang.Object obj)
        Returns the cache costs of a monitored object.

        obj must be of type CmsLruCache.

        Parameters:
        obj - the object
        Returns:
        the cache costs or "-"
      • getItems

        protected java.lang.String getItems​(java.lang.Object obj)
        Returns the number of items within a monitored object.

        obj must be of type CmsLruCache or Map.

        Parameters:
        obj - the object
        Returns:
        the number of items or "-"
      • getKeySize

        protected long getKeySize​(java.util.Map<?,​?> map,
                                  int depth)
        Returns the total size of key strings within a monitored map.

        The keys must be of type String.

        Parameters:
        map - the map
        depth - the max recursion depth for calculation the size
        Returns:
        total size of key strings
      • getKeySize

        protected long getKeySize​(java.lang.Object obj)
        Returns the total size of key strings within a monitored object.

        obj must be of type Map, the keys must be of type String.

        Parameters:
        obj - the object
        Returns:
        the total size of key strings
      • getLimit

        protected java.lang.String getLimit​(java.lang.Object obj)
        Returns the max costs for all items within a monitored object.

        obj must be of type CmsLruCache or LRUMap.

        Parameters:
        obj - the object
        Returns:
        max cost limit or "-"
      • monitorSendEmail

        protected void monitorSendEmail​(boolean warning)
        Sends a warning or status email with OpenCms Memory information.

        Parameters:
        warning - if true, send a memory warning email
      • monitorWriteLog

        protected void monitorWriteLog​(boolean warning)
        Write a warning or status log entry with OpenCms Memory information.

        Parameters:
        warning - if true, write a memory warning log entry
      • updateStatus

        protected void updateStatus()
        Updates the memory information of the memory monitor.