La memoria del server del mio laboratorio (Ubuntu) si riempie costantemente a causa degli utenti che non chiudono mai i vecchi notebook. Mi piacerebbe avere un'idea migliore di quanta memoria abbia preso ogni notebook. Riesco a riassumere l'utilizzo della memoria (approssimativo) per tutti i notebook jupyter gestiti da ciascun utente, ma mi piacerebbe ottenere l'utilizzo totale della memoria di ogni singolo notebook in modo da poter spegnere quei particolari hog della memoria (o dire a un altro utente di chiudere il suo/lei è giù). Ho rapidamente messo insieme il seguente codice per ottenere circa. mem. utilizzo per kernel jupyter, ma non so come associare gli ID del kernel a un particolare notebook.Notebook Jupyter: utilizzo della memoria per ogni notebook
import os
import pwd
import pandas as pd
UID = 1
EUID = 2
pids = [pid for pid in os.listdir('/proc') if pid.isdigit()]
df = []
for pid in pids:
try:
ret = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read()
except IOError: # proc has already terminated
continue
# jupyter notebook processes
if len(ret) > 0 and 'share/jupyter/runtime' in ret:
process = psutil.Process(int(pid))
mem = process.memory_info()[0]
# user name for pid
for ln in open('/proc/%d/status' % int(pid)):
if ln.startswith('Uid:'):
uid = int(ln.split()[UID])
uname = pwd.getpwuid(uid).pw_name
# user, pid, memory, proc_desc
df.append([uname, pid, mem, ret])
df = pd.DataFrame(df)
df.columns = ['user', 'pid', 'memory', 'proc_desc']
df
non posso correre questo .. a causa di nessun modulo trovato con l'errore 'PackageNotFoundError: pacchetti mancanti nei canali attuali: - pwd' . qualsiasi altra soluzione che non richiede 'pwd'. Sono su Windows Server con anaconda python 2.7. – ihightower