MCPcopy Create free account
hub / github.com/MCSLTeam/MCSL2 / MinecraftServerResMonitorUtil

Class MinecraftServerResMonitorUtil

MCSL2Lib/ServerControllers/serverUtils.py:32–100  ·  view source on GitHub ↗

获取服务器资源占用的线程

Source from the content-addressed store, hash-verified

30
31
32class MinecraftServerResMonitorUtil(QObject):
33 """
34 获取服务器资源占用的线程
35 """
36
37 memPercent = pyqtSignal(float)
38 cpuPercent = pyqtSignal(float)
39
40 def __init__(self, serverConfig, bridge: _ServerProcessBridge, parent=None):
41 super().__init__(parent)
42 self.bridge = bridge
43 self.setObjectName("MinecraftServerResMonitorThread")
44 self.timer = QTimer(self)
45 self.timer.timeout.connect(self.getServerMem)
46 self.timer.timeout.connect(self.getServerCPU)
47 self.timer.start(1000)
48 self.serverConfig: ServerVariables = serverConfig
49
50 def getServerMem(self):
51 if not self.bridge.isServerRunning():
52 self.memPercent.emit(0.0000)
53 return
54
55 try:
56 process = Process(self.bridge.handledServer.process.processId())
57 try:
58 mem_bytes = process.memory_full_info().uss
59 except (AccessDenied, PermissionError):
60 try:
61 mem_bytes = process.memory_info().rss
62 except (AccessDenied, PermissionError):
63 MCSL2Logger.warning(
64 f"无法获取进程内存信息: pid={process.pid} 权限不足"
65 )
66 self.memPercent.emit(0.0000)
67 return
68
69 serverMem = mem_bytes / 1048576
70 self.memPercent.emit(float("{:.4f}".format(serverMem)))
71 except NoSuchProcess:
72 self.memPercent.emit(0.0000)
73 except AccessDenied:
74 MCSL2Logger.warning("进程内存查询被拒绝访问")
75 self.memPercent.emit(0.0000)
76 except PermissionError:
77 MCSL2Logger.warning("无权限访问进程内存信息")
78 self.memPercent.emit(0.0000)
79
80 def getServerCPU(self):
81 try:
82 if self.bridge.isServerRunning():
83 serverCPU = Process(self.bridge.handledServer.process.processId()).cpu_percent(
84 interval=0.01
85 )
86 self.cpuPercent.emit(float("{:.4f}".format(serverCPU / 10)))
87 else:
88 self.cpuPercent.emit(0.0000)
89 except NoSuchProcess:

Callers 1

registerResMonitorMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected