flotsam: slower...

master
UbitUmarov 2020-07-28 21:01:45 +01:00
parent bd2476c61e
commit c575c211f9
2 changed files with 31 additions and 30 deletions

View File

@ -678,6 +678,13 @@ namespace OpenSim.Region.CoreModules.Asset
private void CleanupExpiredFiles(object source, ElapsedEventArgs e) private void CleanupExpiredFiles(object source, ElapsedEventArgs e)
{ {
lock (timerLock)
{
if(!m_timerRunning || m_cleanupRunning)
return;
m_cleanupRunning = true;
}
long heap = 0; long heap = 0;
//if (m_LogLevel >= 2) //if (m_LogLevel >= 2)
{ {
@ -685,19 +692,12 @@ namespace OpenSim.Region.CoreModules.Asset
heap = GC.GetTotalMemory(false); heap = GC.GetTotalMemory(false);
} }
lock (timerLock)
{
if(!m_timerRunning || m_cleanupRunning)
return;
m_cleanupRunning = true;
}
// Purge all files last accessed prior to this point // Purge all files last accessed prior to this point
DateTime purgeLine = DateTime.Now - m_FileExpiration; DateTime purgeLine = DateTime.Now - m_FileExpiration;
// An asset cache may contain local non-temporary assets that are not in the asset service. Therefore, // 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 // 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. // 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); TouchAllSceneAssets(false);
int cooldown = 0; int cooldown = 0;
m_log.Info("[FLOTSAM ASSET CACHE] asset files expire"); m_log.Info("[FLOTSAM ASSET CACHE] asset files expire");
@ -742,7 +742,7 @@ namespace OpenSim.Region.CoreModules.Asset
if (File.GetLastAccessTime(file) < purgeLine) if (File.GetLastAccessTime(file) < purgeLine)
{ {
File.Delete(file); File.Delete(file);
cooldown += 5; cooldown += 2;
string id = Path.GetFileName(file); string id = Path.GetFileName(file);
if(!String.IsNullOrEmpty(id)) if(!String.IsNullOrEmpty(id))
{ {
@ -750,7 +750,7 @@ namespace OpenSim.Region.CoreModules.Asset
weakAssetReferences.Remove(id); weakAssetReferences.Remove(id);
} }
} }
if(++cooldown >= 100) if(++cooldown >= 30)
{ {
Thread.Sleep(50); Thread.Sleep(50);
cooldown = 0; cooldown = 0;
@ -952,6 +952,8 @@ namespace OpenSim.Region.CoreModules.Asset
/// <returns>Number of distinct asset references found in the scene.</returns> /// <returns>Number of distinct asset references found in the scene.</returns>
private int TouchAllSceneAssets(bool tryGetUncached) private int TouchAllSceneAssets(bool tryGetUncached)
{ {
m_log.Info("[FLOTSAM ASSET CACHE] start touch files of assets in use");
UuidGatherer gatherer = new UuidGatherer(m_AssetService); UuidGatherer gatherer = new UuidGatherer(m_AssetService);
int cooldown = 0; int cooldown = 0;
@ -980,7 +982,7 @@ namespace OpenSim.Region.CoreModules.Asset
gatherer.AddForInspection(e); gatherer.AddForInspection(e);
while(gatherer.GatherNext()) while(gatherer.GatherNext())
{ {
if (++cooldown > 100) if (++cooldown > 50)
{ {
Thread.Sleep(50); Thread.Sleep(50);
cooldown = 0; cooldown = 0;
@ -996,16 +998,15 @@ namespace OpenSim.Region.CoreModules.Asset
gatherer.GatherAll(); gatherer.GatherAll();
cooldown = 0; cooldown = 0;
// windows does not update access time :(
foreach(UUID id in gatherer.GatheredUuids.Keys) foreach(UUID id in gatherer.GatheredUuids.Keys)
{ {
string idstr = id.ToString(); string idstr = id.ToString();
if(!UpdateFileLastAccessTime(GetFileName(idstr)) && tryGetUncached) if(!UpdateFileLastAccessTime(GetFileName(idstr)) && tryGetUncached)
{ {
cooldown += 10; cooldown += 5;
m_AssetService.Get(idstr); m_AssetService.Get(idstr);
} }
if (++cooldown > 100) if (++cooldown > 50)
{ {
Thread.Sleep(50); Thread.Sleep(50);
cooldown = 0; cooldown = 0;

View File

@ -1802,7 +1802,7 @@
; AppDomainLoading = false ; AppDomainLoading = false
; Set this to true to load attachment scripts in separated domain, if AppDomainLoading is 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 ; AttachmentsDomainLoading = false
; Controls whether previously compiled scripts DLLs are deleted on sim restart. ; Controls whether previously compiled scripts DLLs are deleted on sim restart.
@ -2066,7 +2066,7 @@
;XmlRpcServiceWriteKey = 1234 ;XmlRpcServiceWriteKey = 1234
; Disables HTTP Keep-Alive for XmlRpcGroupsServicesConnector HTTP Requests, ; 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 ; XmlRpcDisableKeepAlive = true
; Minimum user level required to create groups ; Minimum user level required to create groups
@ -2084,20 +2084,20 @@
[InterestManagement] [InterestManagement]
; This section controls how state updates are prioritized for each client ; This section controls how state updates are prioritized for each client
; UpdatePrioritizationScheme valid values are BestAvatarResponsiveness and SimpleAngularDistance ; UpdatePrioritizationScheme valid values are BestAvatarResponsiveness and SimpleAngularDistance
; SimpleAngularDistance does use more cpu ; SimpleAngularDistance does use more cpu
UpdatePrioritizationScheme = BestAvatarResponsiveness UpdatePrioritizationScheme = BestAvatarResponsiveness
ReprioritizationEnabled = true ReprioritizationEnabled = true
ReprioritizationInterval = 2000.0 ReprioritizationInterval = 2000.0
RootReprioritizationDistance = 10.0 RootReprioritizationDistance = 10.0
ChildReprioritizationDistance = 20.0 ChildReprioritizationDistance = 20.0
; ObjectsCullingByDistance, if true, don't send object updates if outside view range ; ObjectsCullingByDistance, if true, don't send object updates if outside view range
; currently viewers are also told to delete objects that leave 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 ; only avater position is considered, free camera may not see objects
; does increase cpu load ; does increase cpu load
ObjectsCullingByDistance = false 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 ; 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). ; 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 ; enabled=false
[Statistics] [Statistics]
; NumberOfFrames is used in a moving average calculation, where NumberOfFrames is the number of frames ; NumberOfFrames is used in a moving average calculation, where NumberOfFrames is the number of frames
; to include in the averaging calculations ; to include in the averaging calculations
NumberOfFrames=10 NumberOfFrames=10
[MediaOnAPrim] [MediaOnAPrim]
; Enable media on a prim facilities ; Enable media on a prim facilities
@ -2146,18 +2146,18 @@
[NPC] [NPC]
;; Enable Non Player Character (NPC) facilities ;; Enable Non Player Character (NPC) facilities
Enabled = false 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 ; 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 ; 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 ; 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 ; NoNPCGroup = true
[Terrain] [Terrain]