@@ -38,10 +38,11 @@ def __init__(
3838 client_snapshot_interval : timedelta = timedelta (milliseconds = 1000 ),
3939 max_used_cpu_ratio : float = 0.95 ,
4040 max_memory_size : ByteSize | None = None ,
41- max_used_memory_ratio : float = 0.7 ,
41+ max_used_memory_ratio : float = 0.9 ,
4242 max_event_loop_delay : timedelta = timedelta (milliseconds = 50 ),
4343 max_client_errors : int = 1 ,
4444 snapshot_history : timedelta = timedelta (seconds = 30 ),
45+ available_memory_ratio : float | None = None ,
4546 reserve_memory_ratio : float = 0.5 ,
4647 memory_warning_cooldown_period : timedelta = timedelta (milliseconds = 10000 ),
4748 client_rate_limit_error_retry_count : int = 2 ,
@@ -74,6 +75,8 @@ def __init__(
7475
7576 snapshot_history: Sets the time interval for which the snapshots are kept.
7677
78+ available_memory_ratio: How big part of the system memory should be used if `max_memory_size` is not given.
79+
7780 reserve_memory_ratio: Fraction of memory kept in reserve. Used to calculate critical memory overload
7881 threshold.
7982
@@ -83,6 +86,9 @@ def __init__(
8386 client_rate_limit_error_retry_count: Number of retries for a client request before considering it a failure
8487 due to rate limiting.
8588 """
89+ if available_memory_ratio is None and max_memory_size is None :
90+ raise ValueError ('At least one of `available_memory_ratio` or `max_memory_size` must be specified' )
91+
8692 self ._event_manager = event_manager
8793 self ._event_loop_snapshot_interval = event_loop_snapshot_interval
8894 self ._client_snapshot_interval = client_snapshot_interval
@@ -94,7 +100,9 @@ def __init__(
94100 self ._reserve_memory_ratio = reserve_memory_ratio
95101 self ._memory_warning_cooldown_period = memory_warning_cooldown_period
96102 self ._client_rate_limit_error_retry_count = client_rate_limit_error_retry_count
97- self ._max_memory_size = max_memory_size or self ._get_default_max_memory_size ()
103+ self ._max_memory_size = max_memory_size or self ._get_default_max_memory_size (
104+ cast (float , available_memory_ratio )
105+ )
98106
99107 self ._cpu_snapshots : list [CpuSnapshot ] = []
100108 self ._event_loop_snapshots : list [EventLoopSnapshot ] = []
@@ -107,9 +115,9 @@ def __init__(
107115 self ._timestamp_of_last_memory_warning : datetime = datetime .now (timezone .utc ) - timedelta (hours = 1 )
108116
109117 @staticmethod
110- def _get_default_max_memory_size () -> ByteSize :
118+ def _get_default_max_memory_size (available_memory_ratio : float ) -> ByteSize :
111119 """Default `memory_max_size` is 1/4 of the total system memory."""
112- max_memory_size_in_bytes = int (psutil .virtual_memory ().total * 0.25 )
120+ max_memory_size_in_bytes = int (psutil .virtual_memory ().total * available_memory_ratio )
113121 max_memory_size = ByteSize (max_memory_size_in_bytes )
114122 logger .info (f'Setting max_memory_size of this run to { max_memory_size } .' )
115123 return max_memory_size
0 commit comments