Projet

Général

Profil

Anomalie #400 » exe_mesureRAM.py

Julien Troufflard, 16/09/2026 13:18

 
#!/usr/bin/env python3

import subprocess
import time
import re
import sys
import platform
from datetime import datetime


# Intervalle entre deux mesures, en secondes
INTERVAL = 1
# Fichier de sortie
LOG_FILE = "memory.log"
# Executable Herezh
exe_hz = "HZppfast_Vn-1"



COMMAND = [exe_hz, "-f", "test.info"]


def get_memory_kb(pid):
"""Retourne la memoire RSS du processus en Ko."""

system = platform.system()

# -------------------------
# Linux
# -------------------------
if system == "Linux":
try:
with open(f"/proc/{pid}/status", "r") as f:
for line in f:
if line.startswith("VmRSS:"):
match = re.search(r"(\d+)", line)
if match:
return int(match.group(1))
except FileNotFoundError:
pass

# -------------------------
# macOS / Darwin
# -------------------------
elif system == "Darwin":
try:
result = subprocess.run(
["ps", "-o", "rss=", "-p", str(pid)],
capture_output=True,
text=True,
check=True
)

output = result.stdout.strip()

if output:
return int(output)

except (subprocess.SubprocessError, ValueError):
pass

return None


def main():
print(f"Lancement de : {' '.join(COMMAND)}")

process = subprocess.Popen(COMMAND)

print(f"PID : {process.pid}")

start_time = time.perf_counter()

with open(LOG_FILE, "w") as log:
log.write("#temps(s) memoire(kb)\n")

try:
while process.poll() is None:
elapsed = time.perf_counter() - start_time
memory_kb = get_memory_kb(process.pid)

if memory_kb is not None:
print(f"{elapsed}s : {memory_kb} Ko")
log.write(f"{elapsed:.3f} {memory_kb}\n")
log.flush()

time.sleep(INTERVAL)

except KeyboardInterrupt:
print("\nArret demande.")

finally:
# Attend que le processus se termine s il est encore actif
if process.poll() is None:
print("Arret du processus...")
process.terminate()

process.wait()


print(f"\n\nFichier cree : {LOG_FILE}\n")


if __name__ == "__main__":
main()
(8-8/11)
Redmine Appliance - Powered by TurnKey Linux