mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-26 05:48:36 +08:00
Co-authored-by: trungbach <trunga2k29@gmail.com> Co-authored-by: quangdz1704 <Ntq.1704@gmail.com> Co-authored-by: Xingyao Wang <xingyao6@illinois.edu>
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
import gc
|
|
from datetime import datetime
|
|
|
|
import psutil
|
|
|
|
from openhands.io.json import dumps
|
|
|
|
|
|
def get_memory_usage():
|
|
"""Get current memory usage of the process"""
|
|
process = psutil.Process()
|
|
return process.memory_info().rss
|
|
|
|
|
|
def test_json_encoder_memory_leak():
|
|
# Force garbage collection before test
|
|
gc.collect()
|
|
initial_memory = get_memory_usage()
|
|
|
|
# Create a large dataset that will need encoding
|
|
large_data = {
|
|
'datetime': datetime.now(),
|
|
'nested': [{'timestamp': datetime.now()} for _ in range(1000)],
|
|
}
|
|
|
|
# Track memory usage over multiple iterations
|
|
memory_samples = []
|
|
for i in range(10):
|
|
# Perform multiple serializations in each iteration
|
|
for _ in range(100):
|
|
dumps(large_data)
|
|
dumps(large_data, indent=2) # Test with kwargs too
|
|
|
|
# Force garbage collection
|
|
gc.collect()
|
|
memory_samples.append(get_memory_usage())
|
|
|
|
# Check if memory usage is stable (not continuously growing)
|
|
# We expect some fluctuation but not a steady increase
|
|
max_memory = max(memory_samples)
|
|
min_memory = min(memory_samples)
|
|
memory_variation = max_memory - min_memory
|
|
|
|
# Allow for more memory variation (2MB) due to Python's memory management
|
|
# The standard library's json module may use more memory than expected
|
|
assert (
|
|
memory_variation < 2 * 1024 * 1024
|
|
), f'Memory usage unstable: {memory_variation} bytes variation'
|
|
|
|
# Also check total memory increase from start
|
|
final_memory = memory_samples[-1]
|
|
memory_increase = final_memory - initial_memory
|
|
|
|
# Allow for some memory increase (2MB) as some objects may be cached
|
|
assert (
|
|
memory_increase < 2 * 1024 * 1024
|
|
), f'Memory leak detected: {memory_increase} bytes increase'
|