Class CmsMemoryMonitor

java.lang.Object
org.opencms.monitor.CmsMemoryMonitor
All Implemented Interfaces:
I_CmsScheduledJob

public class CmsMemoryMonitor extends 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 Details

    • CmsMemoryMonitor

      Empty constructor, required by OpenCms scheduler.

  • Method Details

    • createLRUCacheMap

      public static <T, V> 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(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(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(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(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(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(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(String key, 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(String key, 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
    • cachePermission

      Caches the given permission check result under the given cache key.

      Parameters:
      key - the cache key
      permission - the permission check result 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(String key, 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(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(String key, 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(String cacheKey, 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
    • cachePublishJob

      public void cachePublishJob(CmsPublishJobInfoBean publishJob)
      Caches the given publish job.

      Parameters:
      publishJob - the publish job
    • cachePublishJobInHistory

      Caches the given publish job in the publish job history.

      Parameters:
      publishJob - the publish job
    • cacheResource

      public void cacheResource(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(String key, 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(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(String key, 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(String key, 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(String key, 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(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(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

      Clears the access control list cache when access control entries are changed.

    • clearCache

      public void clearCache()
      Clears almost all internal caches.

    • clearCacheForPublishing

      public void clearCacheForPublishing()
      Clears the caches for publishing.
    • 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
    • disableCache

      public void disableCache(CmsMemoryMonitor.CacheType... types)
      Disables the given cache.

      Parameters:
      types - the cache type to disable
    • enableCache

      public void enableCache(CmsMemoryMonitor.CacheType... types)
      Enables the given cache.

      Parameters:
      types - the cache type to disable
    • enabled

      public boolean enabled()
      Returns if monitoring is enabled.

      Returns:
      true if monitoring is enabled
    • flushACLs

      @Deprecated public void flushACLs()
      Deprecated.
      Flushes the ACL cache.

    • flushCache

      public void flushCache(CmsMemoryMonitor.CacheType... types)
      Flushes the given cache.

      Parameters:
      types - the cache types to flush
    • flushContentDefinitions

      Deprecated.
      Flushes the xml content definitions cache.

    • flushGroups

      @Deprecated public void flushGroups()
      Deprecated.
      Flushes the group cache.

    • flushLocales

      @Deprecated public void flushLocales()
      Deprecated.
      Flushes the locale cache.

    • flushLocks

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

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

      Deprecated.
      Flushes the memory object cache.

    • flushOrgUnits

      @Deprecated public void flushOrgUnits()
      Deprecated.
      Flushes the organizational unit cache.

    • flushPermissions

      Deprecated.
      Flushes the permission check result cache.

    • flushProjectResources

      Deprecated.
      Flushes the project resources cache.

    • flushProjects

      @Deprecated public void flushProjects()
      Deprecated.
      Flushes the project cache.

    • flushProperties

      Deprecated.
      Flushes the property cache.

    • flushPropertyLists

      Deprecated.
      Flushes the property list cache.

    • flushPublishedResources

      Deprecated.
      Flushes the published resources cache.

    • flushPublishJobHistory

      Deprecated.
      Flushes the publish history.

    • flushPublishJobs

      Deprecated.
      Flushes the publish queue.

    • flushResourceLists

      Deprecated.
      Flushes the resource list cache.

    • flushResources

      @Deprecated public void flushResources()
      Deprecated.
      Flushes the resource cache.

    • flushRoleLists

      @Deprecated public void flushRoleLists()
      Deprecated.
      Flushes the role lists cache.

    • flushRoles

      @Deprecated public void flushRoles()
      Deprecated.
      Flushes the roles cache.

    • flushUserGroups

      Deprecated.
      Flushes the user groups cache.

    • flushUserGroups

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

      @Deprecated public void flushUsers()
      Deprecated.
      Flushes the users cache.

    • flushVfsObjects

      Deprecated.
      Flushes the vfs object cache.

    • flushXmlPermanentEntities

      Deprecated.
      Flushes the xml permanent entities cache.

    • flushXmlTemporaryEntities

      Deprecated.
      Flushes the xml temporary entities cache.

    • getAllCachedLockPaths

      Returns all cached lock root paths.

      Returns:
      a list of String objects
    • getAllCachedLocks

      Returns all cached locks.

      Returns:
      a list of CmsLock objects
    • getAllCachedPublishJobs

      Returns all cached publish jobs in the queue as ordered list.

      Returns:
      all cached publish jobs
    • getAllCachedPublishJobsInHistory

      Returns all cached publish jobs in the history as ordered list.

      Returns:
      all cached publish jobs
    • getCachedACL

      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

      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

      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

      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(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

      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

      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
    • getCachedPermission

      Returns the permission check result cached with the given cache key or null if not found.

      Parameters:
      key - the cache key to look for
      Returns:
      the permission check result cached with the given cache key
    • getCachedProject

      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

      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

      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

      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

      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

      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

      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

      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

      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

      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

      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

      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

      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

      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

      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(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(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
    • getConfiguration

      Returns the configuration.

      Returns:
      the configuration
    • getFirstCachedPublishJob

      Returns the next publish job from the publish job queue.

      Returns:
      the next publish job
    • getGroupListCache

      Gets the group list cache.
      Returns:
      the group list cache
    • getLogCount

      public int getLogCount()
      Returns the log count.

      Returns:
      the log count
    • getMemoryStatus

      Returns the current memory status.

      Returns:
      the memory status
    • getResourceOuCache

      Gets the cache for OU / resource associations.
      Returns:
      the cache
    • 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(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 String launch(CmsObject cms, Map<String,String> parameters) throws 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:
      Exception - if something goes wrong
      See Also:
    • 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(String objectName, 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
    • setCacheProperty

      @Deprecated public void setCacheProperty(boolean cacheProperty)
      Sets if the property cache is enabled.

      Parameters:
      cacheProperty - if the property cache is enabled
    • setCachePropertyList

      @Deprecated public void setCachePropertyList(boolean cachePropertyList)
      Sets if the property list cache is enabled.

      Parameters:
      cachePropertyList - if the property list cache is enabled
    • setCacheResource

      @Deprecated public void setCacheResource(boolean cacheResource)
      Sets if the resource cache is enabled.

      Parameters:
      cacheResource - if the resource cache is enabled
    • setCacheResourceList

      @Deprecated public void setCacheResourceList(boolean cacheResourceList)
      Sets if the resource list cache is enabled.

      Parameters:
      cacheResourceList - if the resource list cache is enabled
    • shutdown

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

      Throws:
      Exception - if something goes wrong
    • uncacheContentDefinition

      public void uncacheContentDefinition(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(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
    • uncachePublishJob

      public void uncachePublishJob(CmsPublishJobInfoBean publishJob)
      Removes the given publish job from the cache.

      Parameters:
      publishJob - the publish job to remove
    • uncachePublishJobInHistory

      Removes the given publish job from the history.

      Parameters:
      publishJob - the publish job to remove
    • 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(String key)
      Removes the given vfs object from the cache.

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

      public void uncacheXmlTemporaryEntity(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(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 String getItems(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(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(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 String getLimit(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.