Files
swap-tool/profile.txt
2025-11-05 14:59:52 +06:00

52 lines
3.7 KiB
Plaintext

Wrote profile results to 'main.py.lprof'
Timer unit: 1e-06 s
Total time: 0.465667 s
File: main.py
Function: get_process_swap_usage at line 29
Line # Hits Time Per Hit % Time Line Contents
==============================================================
29 @profile
30 def get_process_swap_usage() -> None:
31 1 4.7 4.7 0.0 print(f"{'PID':>6} {'Name':<25} {'Swap (MB)':>10}")
32 1 1.9 1.9 0.0 print("-" * 45)
33
34 1 1.5 1.5 0.0 total_swap_used = 0
35
36 1 1.5 1.5 0.0 swap_used: list[ProcessSwapInfo] = []
37
38 476 428514.1 900.2 92.0 for proc in psutil.process_iter(['pid', 'name', 'memory_full_info']):
39 475 894.0 1.9 0.2 try:
40 950 19757.6 20.8 4.2 with proc.oneshot():
41 475 878.1 1.8 0.2 mem_info = proc.info['memory_full_info']
42 475 942.4 2.0 0.2 s: int = getattr(mem_info, "swap", 0)
43 475 880.2 1.9 0.2 if s > 0:
44 167 10376.3 62.1 2.2 swap_used.append(ProcessSwapInfo(proc.pid, proc.name(), s))
45 167 320.2 1.9 0.1 total_swap_used += s
46 except (psutil.NoSuchProcess, psutil.AccessDenied):
47 continue
48
49 1 97.1 97.1 0.0 swap_used.sort(key=lambda x: x.swap)
50
51 1 2.4 2.4 0.0 def add_to_group(groups: dict[ProcessName, ProcessSwapGroup], process: ProcessSwapInfo) -> dict[ProcessName, ProcessSwapGroup]:
52 if process.name not in groups:
53 groups[process.name] = ProcessSwapGroup(process.name)
54 groups[process.name].processes.append(process)
55 return groups
56
57 2 247.9 124.0 0.1 swap_used_groups: list[ProcessSwapGroup] = sorted(
58 1 548.6 548.6 0.1 (item for item in reduce(add_to_group, swap_used, dict()).values()),
59 1 2.4 2.4 0.0 key=lambda x: x.total_swap
60 )
61
62 103 191.7 1.9 0.0 for group in swap_used_groups:
63 102 617.0 6.0 0.1 print(f"{group.name:<32} {bytes_to_mb(group.total_swap):10.2f}")
64 269 489.7 1.8 0.1 for item in group.processes:
65 167 679.6 4.1 0.1 print(f"{item.pid:>32} {bytes_to_mb(item.swap):10.2f}")
66 102 210.4 2.1 0.0 print()
67
68 1 2.4 2.4 0.0 print("-" * 45)
69 1 5.2 5.2 0.0 print(f"{'Total swap used by processes:':<32} {bytes_to_mb(total_swap_used):10.2f} MB")