Exemplo n.º 1
0
        public ContainerManager(Container container)
        {
            _container     = container;
            _memoryTracker = new Timer(
                obj => MemoryTracker(), null, Timeout.Infinite, Timeout.Infinite);

            MemoryUsage = _container.MemoryLimit;
            Status      = ContainerManagerStatus.Initialized;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Periodic check the container's recource usage,
        /// shut down it if exceed the limit.
        /// </summary>
        private void MemoryTracker()
        {
            if (_container.HasExited)
            {
                // Stop tracking
                _memoryTracker.Change(Timeout.Infinite, Timeout.Infinite);
                Status = ContainerManagerStatus.ExitedNormaly;
            }

            if (_container.GetMemoryUsage() - _container.MemoryLimit < 0)
            {
                // Shutdown current container
                _container.Dispose();
                _memoryTracker.Dispose();
                Status = ContainerManagerStatus.ExitedMandatory;
            }
            else
            {
                _memoryTracker.Change(PERIOD, Timeout.Infinite);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Launch the container which managed by this manager,
 /// and start tracking it resource usage
 /// </summary>
 public void Run()
 {
     _container.Run();
     _memoryTracker.Change(PERIOD, Timeout.Infinite);
     Status = ContainerManagerStatus.Tracking;
 }