[docker] Run profiling without sudo (#10388)

* fix profiling for docker

* small fixes

* use name

* do not import pwd on windows
This commit is contained in:
Ian Rodney
2020-08-28 21:25:10 -07:00
committed by GitHub
parent c14b44a292
commit d6f2b0d933
3 changed files with 19 additions and 4 deletions
+3 -2
View File
@@ -43,9 +43,10 @@ class ReporterServer(reporter_pb2_grpc.ReporterServiceServicer):
duration = request.duration
profiling_file_path = os.path.join(ray.utils.get_ray_temp_dir(),
f"{pid}_profiling.txt")
sudo = "sudo" if ray.utils.get_user() != "root" else ""
process = subprocess.Popen(
"sudo $(which py-spy) record -o {} -p {} -d {} -f speedscope"
.format(profiling_file_path, pid, duration),
(f"{sudo} $(which py-spy) record -o {profiling_file_path} -p {pid}"
f" -d {duration} -f speedscope"),
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True)
+13
View File
@@ -18,6 +18,10 @@ import ray.gcs_utils
import ray.ray_constants as ray_constants
import psutil
pwd = None
if sys.platform != "win32":
import pwd
logger = logging.getLogger(__name__)
# Linux can bind child processes' lifetimes to that of their parents via prctl.
@@ -780,3 +784,12 @@ def try_to_symlink(symlink_path, target_path):
os.symlink(target_path, symlink_path)
except OSError:
return
def get_user():
if pwd is None:
return ""
try:
return pwd.getpwuid(os.getuid()).pw_name
except Exception:
return ""