diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index 170f4daef6..3c632759c0 100755 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs @@ -678,6 +678,13 @@ namespace OpenSim.Region.CoreModules.Asset private void CleanupExpiredFiles(object source, ElapsedEventArgs e) { + lock (timerLock) + { + if(!m_timerRunning || m_cleanupRunning) + return; + m_cleanupRunning = true; + } + long heap = 0; //if (m_LogLevel >= 2) { @@ -685,19 +692,12 @@ namespace OpenSim.Region.CoreModules.Asset heap = GC.GetTotalMemory(false); } - lock (timerLock) - { - if(!m_timerRunning || m_cleanupRunning) - return; - m_cleanupRunning = true; - } // Purge all files last accessed prior to this point DateTime purgeLine = DateTime.Now - m_FileExpiration; // An asset cache may contain local non-temporary assets that are not in the asset service. Therefore, // before cleaning up expired files we must scan the objects in the scene to make sure that we retain // such local assets if they have not been recently accessed. - m_log.Info("[FLOTSAM ASSET CACHE] start touch files of assets in use"); TouchAllSceneAssets(false); int cooldown = 0; m_log.Info("[FLOTSAM ASSET CACHE] asset files expire"); @@ -742,7 +742,7 @@ namespace OpenSim.Region.CoreModules.Asset if (File.GetLastAccessTime(file) < purgeLine) { File.Delete(file); - cooldown += 5; + cooldown += 2; string id = Path.GetFileName(file); if(!String.IsNullOrEmpty(id)) { @@ -750,7 +750,7 @@ namespace OpenSim.Region.CoreModules.Asset weakAssetReferences.Remove(id); } } - if(++cooldown >= 100) + if(++cooldown >= 30) { Thread.Sleep(50); cooldown = 0; @@ -952,6 +952,8 @@ namespace OpenSim.Region.CoreModules.Asset /// Number of distinct asset references found in the scene. private int TouchAllSceneAssets(bool tryGetUncached) { + m_log.Info("[FLOTSAM ASSET CACHE] start touch files of assets in use"); + UuidGatherer gatherer = new UuidGatherer(m_AssetService); int cooldown = 0; @@ -980,7 +982,7 @@ namespace OpenSim.Region.CoreModules.Asset gatherer.AddForInspection(e); while(gatherer.GatherNext()) { - if (++cooldown > 100) + if (++cooldown > 50) { Thread.Sleep(50); cooldown = 0; @@ -996,16 +998,15 @@ namespace OpenSim.Region.CoreModules.Asset gatherer.GatherAll(); cooldown = 0; - // windows does not update access time :( foreach(UUID id in gatherer.GatheredUuids.Keys) { string idstr = id.ToString(); if(!UpdateFileLastAccessTime(GetFileName(idstr)) && tryGetUncached) { - cooldown += 10; + cooldown += 5; m_AssetService.Get(idstr); } - if (++cooldown > 100) + if (++cooldown > 50) { Thread.Sleep(50); cooldown = 0; diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 23d7d54d15..51a8bb9dc3 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -1802,7 +1802,7 @@ ; AppDomainLoading = false ; Set this to true to load attachment scripts in separated domain, if AppDomainLoading is false - ; same issues as AppDomainLoading, but my be usefull on regions with a lot of avatars traffic, if they carry scripts like AOs + ; same issues as AppDomainLoading, but my be useful on regions with a lot of avatars traffic, if they carry scripts like AOs ; AttachmentsDomainLoading = false ; Controls whether previously compiled scripts DLLs are deleted on sim restart. @@ -2066,7 +2066,7 @@ ;XmlRpcServiceWriteKey = 1234 ; Disables HTTP Keep-Alive for XmlRpcGroupsServicesConnector HTTP Requests, - ; only set to false it if you absolute sure regions and groups server support it. + ; only set to false it if you absolute sure regions and groups server support it. ; XmlRpcDisableKeepAlive = true ; Minimum user level required to create groups @@ -2084,20 +2084,20 @@ [InterestManagement] ; This section controls how state updates are prioritized for each client - + ; UpdatePrioritizationScheme valid values are BestAvatarResponsiveness and SimpleAngularDistance - ; SimpleAngularDistance does use more cpu + ; SimpleAngularDistance does use more cpu UpdatePrioritizationScheme = BestAvatarResponsiveness ReprioritizationEnabled = true ReprioritizationInterval = 2000.0 RootReprioritizationDistance = 10.0 ChildReprioritizationDistance = 20.0 - ; ObjectsCullingByDistance, if true, don't send object updates if outside view range - ; currently viewers are also told to delete objects that leave view range - ; only avater position is considered, free camera may not see objects - ; does increase cpu load - ObjectsCullingByDistance = false + ; ObjectsCullingByDistance, if true, don't send object updates if outside view range + ; currently viewers are also told to delete objects that leave view range + ; only avater position is considered, free camera may not see objects + ; does increase cpu load + ObjectsCullingByDistance = false ; If n > 1, only every n UDP terse updates will be sent to observers of an avatar that are in the same region ; Updates will always be sent to the avatar that the update addresses and if av velocity is effectively zero (to prevent drift due to missing updates). @@ -2134,9 +2134,9 @@ ; enabled=false [Statistics] - ; NumberOfFrames is used in a moving average calculation, where NumberOfFrames is the number of frames - ; to include in the averaging calculations - NumberOfFrames=10 + ; NumberOfFrames is used in a moving average calculation, where NumberOfFrames is the number of frames + ; to include in the averaging calculations + NumberOfFrames=10 [MediaOnAPrim] ; Enable media on a prim facilities @@ -2146,18 +2146,18 @@ [NPC] ;; Enable Non Player Character (NPC) facilities Enabled = false - ;; several options to control NPCs creation + ;; several options to control NPCs creation - ;; allow NPCs to be created not Owned {true false} default: true + ;; allow NPCs to be created not Owned {true false} default: true ; AllowNotOwned = true - ;; allow NPCs to set to be sensed as Avatars {true false} default: true + ;; allow NPCs to set to be sensed as Avatars {true false} default: true ; AllowSenseAsAvatar = true - ;; allow NPCs to created cloning any avatar in region {true false} default: true + ;; allow NPCs to created cloning any avatar in region {true false} default: true ; AllowCloneOtherAvatars = true - ;; if true NPCs will have no group title, if false display "- NPC -" for easy identification {true false} default: true + ;; if true NPCs will have no group title, if false display "- NPC -" for easy identification {true false} default: true ; NoNPCGroup = true [Terrain]