Comprehensive memory cleanup function to reduce memory footprint Args: log_usage: Whether to log memory usage before and after cleanup force_collection: Whether to force garbage collection
(log_usage=False, force_collection=True)
| 566 | |
| 567 | |
| 568 | def cleanup_memory(log_usage=False, force_collection=True): |
| 569 | """ |
| 570 | Comprehensive memory cleanup function to reduce memory footprint |
| 571 | |
| 572 | Args: |
| 573 | log_usage: Whether to log memory usage before and after cleanup |
| 574 | force_collection: Whether to force garbage collection |
| 575 | """ |
| 576 | logger.trace("Starting memory cleanup django memory cleanup") |
| 577 | # Skip logging if log level is not set to debug or more verbose (like trace) |
| 578 | current_log_level = logger.getEffectiveLevel() |
| 579 | if not current_log_level <= logging.DEBUG: |
| 580 | log_usage = False |
| 581 | if log_usage: |
| 582 | try: |
| 583 | import psutil |
| 584 | process = psutil.Process() |
| 585 | before_mem = process.memory_info().rss / (1024 * 1024) |
| 586 | logger.debug(f"Memory before cleanup: {before_mem:.2f} MB") |
| 587 | except (ImportError, Exception) as e: |
| 588 | logger.debug(f"Error getting memory usage: {e}") |
| 589 | |
| 590 | # Clear any object caches from Django ORM |
| 591 | from django.db import connection, reset_queries |
| 592 | reset_queries() |
| 593 | |
| 594 | # Force garbage collection |
| 595 | if force_collection: |
| 596 | # Run full collection |
| 597 | gc.collect(generation=2) |
| 598 | # Clear cyclic references |
| 599 | gc.collect(generation=0) |
| 600 | |
| 601 | if log_usage: |
| 602 | try: |
| 603 | import psutil |
| 604 | process = psutil.Process() |
| 605 | after_mem = process.memory_info().rss / (1024 * 1024) |
| 606 | logger.debug(f"Memory after cleanup: {after_mem:.2f} MB (change: {after_mem-before_mem:.2f} MB)") |
| 607 | except (ImportError, Exception): |
| 608 | pass |
| 609 | logger.trace("Memory cleanup complete for django") |
| 610 | |
| 611 | |
| 612 | def spawn_memory_trim(close_connections=False): |
no outgoing calls
no test coverage detected