html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/7404#issuecomment-1369656073,https://api.github.com/repos/pydata/xarray/issues/7404,1369656073,IC_kwDOAMm_X85Ro0sJ,60647051,2023-01-03T11:22:21Z,2023-01-03T11:23:55Z,NONE,"Thanks @DocOtak for the observation. This is valid only when iterating over the same file. I am observing the same behavior. Here is a memory usage against the iterations. ![image](https://user-images.githubusercontent.com/60647051/210348062-1abb4b36-a9da-4459-95fb-b0a730e676ff.png) When I tried to validate this by iterating over different files, the memory is gradually increasing. Here is a memory usage. ![image](https://user-images.githubusercontent.com/60647051/210347854-bff2ace8-5d52-4987-b620-a0e8a7bf7ede.png) ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1512460818 https://github.com/pydata/xarray/issues/7404#issuecomment-1367488859,https://api.github.com/repos/pydata/xarray/issues/7404,1367488859,IC_kwDOAMm_X85Rgjlb,868027,2022-12-29T17:45:33Z,2022-12-29T17:45:33Z,CONTRIBUTOR,"I've personally seen a lot of what looks like memory reuse in numpy and related libraries. I don't think any of this happens explicitly but have never investigated. I would have some expectation that if memory was not being released as expected, that opening and closing the dataset in a loop would increase memory usage, it didn't on the recent library versions I have. ```python Start: 89.71875 MiB Before opening file: 90.203125 MiB After opening file: 96.6875 MiB Filename: test.py Line # Mem usage Increment Occurrences Line Contents ============================================================= 6 90.2 MiB 90.2 MiB 1 @profile 7 def main(): 8 90.2 MiB 0.0 MiB 1 path = 'ECMWF_ERA-40_subset.nc' 9 90.2 MiB 0.0 MiB 1 print(f""Before opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") 10 96.7 MiB -0.1 MiB 1001 for i in range(1000): 11 96.7 MiB 6.4 MiB 1000 with xr.open_dataset(path) as ds: 12 96.7 MiB -0.1 MiB 1000 ... 13 96.7 MiB 0.0 MiB 1 print(f""After opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") End: 96.6875 MiB ```
Show Versions ``` INSTALLED VERSIONS ------------------ commit: None python: 3.8.13 (default, Jul 23 2022, 17:00:57) [Clang 13.1.6 (clang-1316.0.21.2.5)] python-bits: 64 OS: Darwin OS-release: 22.1.0 machine: arm64 processor: arm byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: ('en_US', 'UTF-8') libhdf5: 1.12.2 libnetcdf: 4.9.0 xarray: 2022.11.0 pandas: 1.4.3 numpy: 1.23.5 scipy: None netCDF4: 1.6.0 pydap: None h5netcdf: None h5py: None Nio: None zarr: None cftime: 1.6.1 nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: None dask: None distributed: None matplotlib: 3.5.3 cartopy: None seaborn: None numbagg: None fsspec: None cupy: None pint: None sparse: None flox: None numpy_groupies: None setuptools: 56.0.0 pip: 22.0.4 conda: None pytest: 6.2.5 IPython: 8.4.0 sphinx: 5.1.1 ```
","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1512460818 https://github.com/pydata/xarray/issues/7404#issuecomment-1367443148,https://api.github.com/repos/pydata/xarray/issues/7404,1367443148,IC_kwDOAMm_X85RgYbM,60647051,2022-12-29T16:20:41Z,2022-12-29T16:20:41Z,NONE,"Thanks @shoyer , but closing the dataset explicitly also doesn't seem to be releasing the memory. ```bash Start: 185.5078125 MiB Before opening file: 186.28515625 MiB After opening file: 307.75390625 MiB Filename: temp.py Line # Mem usage Increment Occurrences Line Contents ============================================================= 7 186.1 MiB 186.1 MiB 1 @profile 8 def main(): 9 186.1 MiB 0.0 MiB 1 path = 'ECMWF_ERA-40_subset.nc' 10 186.1 MiB 0.0 MiB 1 gc.collect() 11 186.3 MiB 0.2 MiB 1 print(f""Before opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") 12 307.8 MiB 121.5 MiB 1 ds = xr.open_dataset(path) 13 307.8 MiB 0.0 MiB 1 ds.close() 14 307.8 MiB 0.0 MiB 1 del ds 15 307.8 MiB 0.0 MiB 1 gc.collect() 16 307.8 MiB 0.0 MiB 1 print(f""After opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") End: 307.75390625 MiB ``` I also tried the context manager but the same memory consumption. ```bash Start: 185.5625 MiB Before opening file: 186.36328125 MiB After opening file: 307.265625 MiB Filename: temp.py Line # Mem usage Increment Occurrences Line Contents ============================================================= 7 186.2 MiB 186.2 MiB 1 @profile 8 def main(): 9 186.2 MiB 0.0 MiB 1 path = 'ECMWF_ERA-40_subset.nc' 10 186.2 MiB 0.0 MiB 1 gc.collect() 11 186.4 MiB 0.2 MiB 1 print(f""Before opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") 12 307.3 MiB 120.9 MiB 1 with xr.open_dataset(path) as ds: 13 307.3 MiB 0.0 MiB 1 ds.close() 14 307.3 MiB 0.0 MiB 1 del ds 15 307.3 MiB 0.0 MiB 1 gc.collect() 16 307.3 MiB 0.0 MiB 1 print(f""After opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") End: 307.265625 MiB ``` ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1512460818 https://github.com/pydata/xarray/issues/7404#issuecomment-1366880017,https://api.github.com/repos/pydata/xarray/issues/7404,1366880017,IC_kwDOAMm_X85ReO8R,1217238,2022-12-28T19:46:07Z,2022-12-28T19:46:07Z,MEMBER,"If you care about memory usage, you should explicitly close files after you use them, e.g., by calling `ds.close()` or by using a context manager. Does that work for you?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1512460818 https://github.com/pydata/xarray/issues/7404#issuecomment-1366807012,https://api.github.com/repos/pydata/xarray/issues/7404,1366807012,IC_kwDOAMm_X85Rd9Hk,60647051,2022-12-28T17:21:28Z,2022-12-28T17:21:28Z,NONE,"It still shows similar memory consumption. ```bash Start: 185.6015625 MiB Before opening file: 186.24609375 MiB After opening file: 307.1328125 MiB Filename: temp.py Line # Mem usage Increment Occurrences Line Contents ============================================================= 7 186.0 MiB 186.0 MiB 1 @profile 8 def main(): 9 186.0 MiB 0.0 MiB 1 path = 'ECMWF_ERA-40_subset.nc' 10 186.0 MiB 0.0 MiB 1 gc.collect() 11 186.2 MiB 0.2 MiB 1 print(f""Before opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") 12 307.1 MiB 120.9 MiB 1 ds = xr.open_dataset(path) 13 307.1 MiB 0.0 MiB 1 del ds 14 307.1 MiB 0.0 MiB 1 gc.collect() 15 307.1 MiB 0.0 MiB 1 print(f""After opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") End: 307.1328125 MiB ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1512460818 https://github.com/pydata/xarray/issues/7404#issuecomment-1366545996,https://api.github.com/repos/pydata/xarray/issues/7404,1366545996,IC_kwDOAMm_X85Rc9ZM,14808389,2022-12-28T10:28:22Z,2022-12-28T10:28:22Z,MEMBER,"I'm not sure how `memory_profiler` calculates the memory usage, but I suspect that this happens because python's garbage collector does not have to run immediately after the `del`. Can you try manually triggering the garbage collector? ```python import gc import os import psutil import xarray as xr from memory_profiler import profile @profile def main(): path = 'ECMWF_ERA-40_subset.nc' gc.collect() print(f""Before opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") ds = xr.open_dataset(path) del ds gc.collect() print(f""After opening file: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") if __name__ == '__main__': print(f""Start: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") main() print(f""End: {psutil.Process(os.getpid()).memory_info().rss / 1024 ** 2} MiB"") ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1512460818