Skip to content

Commit c1d5dbd

Browse files
authored
FEAT-#4501: Add RSS Memory Profiling to Modin Logging (#4502)
Signed-off-by: Naren Krishna <[email protected]>
1 parent cca9468 commit c1d5dbd

File tree

3 files changed

+45
-3
lines changed

3 files changed

+45
-3
lines changed

docs/release_notes/release_notes-0.15.0.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ Key Features and Updates
3232
* PERF-#4493: Use partition size caches more in Modin dataframe (#4495)
3333
* Benchmarking enhancements
3434
* FEAT-#4371: Add logging to Modin (#4372)
35+
* FEAT-#4501: Add RSS Memory Profiling to Modin Logging (#4502)
3536
* Refactor Codebase
3637
* REFACTOR-#4284: use variable length unpacking when getting results from `deploy` function (#4285)
3738
* REFACTOR-#3642: Move PyArrow storage format usage from main feature to experimental ones (#4374)

modin/config/envvars.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,40 @@ def get(cls):
415415
return log_memory_interval
416416

417417

418+
class LogMemorySize(EnvironmentVariable, type=int):
419+
"""Size of logs (in MBs) to store per Modin job."""
420+
421+
varname = "MODIN_LOG_MEMORY_SIZE"
422+
default = 100
423+
424+
@classmethod
425+
def put(cls, value):
426+
"""
427+
Set ``LogMemorySize`` with extra checks.
428+
429+
Parameters
430+
----------
431+
value : int
432+
Config value to set.
433+
"""
434+
if value <= 0:
435+
raise ValueError(f"Log memory size should be > 0 MB, passed value {value}")
436+
super().put(value)
437+
438+
@classmethod
439+
def get(cls):
440+
"""
441+
Get ``LogMemorySize`` with extra checks.
442+
443+
Returns
444+
-------
445+
int
446+
"""
447+
log_memory_size = super().get()
448+
assert log_memory_size > 0, "`LogMemorySize` should be > 0"
449+
return log_memory_size
450+
451+
418452
class PersistentPickle(EnvironmentVariable, type=bool):
419453
"""Wheather serialization should be persistent."""
420454

modin/logging/config.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"""
1919

2020
import logging
21+
from logging.handlers import RotatingFileHandler
2122
import datetime as dt
2223
import os
2324
import uuid
@@ -26,7 +27,7 @@
2627
import pkg_resources
2728
import threading
2829
import time
29-
from modin.config import LogMemoryInterval, LogMode
30+
from modin.config import LogMemoryInterval, LogMemorySize, LogMode
3031

3132
__LOGGER_CONFIGURED__: bool = False
3233

@@ -96,7 +97,12 @@ def configure_logging():
9697

9798
os.makedirs(os.path.dirname(log_filename), exist_ok=True)
9899

99-
logfile = logging.FileHandler(log_filename, "a")
100+
logfile = RotatingFileHandler(
101+
filename=log_filename,
102+
mode="a",
103+
maxBytes=LogMemorySize.get() * int(1e5),
104+
backupCount=10,
105+
)
100106
formatter = ModinFormatter(
101107
fmt="%(process)d, %(thread)d, %(asctime)s, %(message)s",
102108
datefmt="%Y-%m-%d,%H:%M:%S.%f",
@@ -108,7 +114,6 @@ def configure_logging():
108114
logger.setLevel(logging.INFO)
109115
logger.setLevel(logging.DEBUG)
110116

111-
logger = logging.getLogger("modin.logger")
112117
logger.info(f"OS Version: {platform.platform()}")
113118
logger.info(f"Python Version: {platform.python_version()}")
114119
modin_version = pkg_resources.get_distribution("modin").version
@@ -146,8 +151,10 @@ def memory_thread(logger, sleep_time):
146151
The interval at which to profile system memory.
147152
"""
148153
while True:
154+
rss_mem = bytes_int_to_str(psutil.Process().memory_info().rss)
149155
svmem = psutil.virtual_memory()
150156
logger.info(f"Memory Percentage: {svmem.percent}%")
157+
logger.info(f"RSS Memory: {rss_mem}")
151158
time.sleep(sleep_time)
152159

153160

0 commit comments

Comments
 (0)