Check current memory pressure and take action if needed
(&self)
| 194 | |
| 195 | /// Check current memory pressure and take action if needed |
| 196 | pub fn check_memory_pressure(&self) { |
| 197 | if !self.monitoring_active.load(Ordering::Relaxed) { |
| 198 | return; |
| 199 | } |
| 200 | |
| 201 | let current_memory = self.get_current_memory_usage(); |
| 202 | let pressure = self.calculate_pressure_level(current_memory); |
| 203 | |
| 204 | // Update stats |
| 205 | { |
| 206 | let mut stats = self.stats.lock(); |
| 207 | stats.buffer_pool_bytes = self.buffer_pool_bytes.load(Ordering::Relaxed); |
| 208 | stats.message_bytes = self.message_bytes.load(Ordering::Relaxed); |
| 209 | stats.query_bytes = self.query_bytes.load(Ordering::Relaxed); |
| 210 | stats.pressure_level = pressure; |
| 211 | |
| 212 | if current_memory > stats.peak_memory_bytes { |
| 213 | stats.peak_memory_bytes = current_memory; |
| 214 | } |
| 215 | |
| 216 | stats.cleanup_events = self.cleanup_events.load(Ordering::Relaxed); |
| 217 | } |
| 218 | |
| 219 | // Take action based on pressure level |
| 220 | if pressure != MemoryPressure::Low && self.config.enable_auto_cleanup { |
| 221 | self.trigger_cleanup(pressure); |
| 222 | } |
| 223 | |
| 224 | // Log memory status if detailed monitoring is enabled |
| 225 | if self.config.enable_detailed_monitoring { |
| 226 | self.log_memory_status(current_memory, pressure); |
| 227 | } |
| 228 | } |
| 229 | |
| 230 | /// Get current total memory usage |
| 231 | fn get_current_memory_usage(&self) -> u64 { |