最近国补入手了一台Dell G15 5530, 发现在床上玩电脑的时候,显卡功率被限制到30w了,nvidia-smi命令不能实时刷新,其他的工具也太重了,所以搞了一个这个东西。文件可能有点大,我把echarts.js硬编码进来了,如果介意可以改成CDN,我为了图方便(网的质量比较差),就写死了。
技术
python3.x
threading
time
json
webview [这个包应该是pip install pywebview 安装的] , 没有用python的GUI库,感觉挺麻烦的,html做比较简单。
pynvml [这个包会默认找nvml.dll的位置可能不对,需要改包的代码,需要一定的动手能力]
踩坑
pynvml.NVMLError_LibraryNotFound: NVML Shared Library Not Found
这个需要修改pynvml.py,把nvmlLib = CDLL里面的地址硬编码。
截图

image.png (119.87 KB, 下载次数: 0)
下载附件
2025-6-6 10:06 上传
用途- 查找性能下降的原因
其实他就是一个监控类型的软件,没啥大用,我本身也是一个程序猿,觉得这种py思路还是挺不错的,弥补了py中一些GUI的缺陷(丑)
ε=ε=ε=┏(゜ロ゜;)┛
关键代码
[color=]class
Api:
[color=]def
[color=]__init__
[color=](
[color=]self
[color=])
:
[color=]self
.handle = pynvml.nvmlDeviceGetHandleByIndex
[color=](
[color=]0
[color=])
[color=]
[color=]self
.data =
[color=]{
[color=]
[color=]"timestamp"
:
[color=][]
,
[color=]"mem_used"
:
[color=][]
,
[color=]"mem_total"
:
[color=][]
,
[color=]"gpu_util"
:
[color=][]
,
[color=]"temp"
:
[color=][]
,
[color=]"power_usage"
:
[color=][]
,
[color=]"power_limit"
:
[color=][]
,
[color=]"pcie_tx"
:
[color=][]
,
[color=]"pcie_rx"
:
[color=][]
,
[color=]}
[color=]
[color=]self
.lock = threading.Lock
[color=]()
[color=]
[color=]def
[color=]get_window_size
[color=](
[color=]self
[color=])
:
[color=]return
[color=]{
[color=]"width"
: window.width,
[color=]"height"
: window.height
[color=]}
[color=]
[color=]def
[color=]generate_data
[color=](
[color=]self
[color=])
:
[color=]with
[color=]self
.lock:
now = time.time
[color=]()
[color=]
mem = pynvml.nvmlDeviceGetMemoryInfo
[color=](
[color=]self
.handle
[color=])
[color=]
util = pynvml.nvmlDeviceGetUtilizationRates
[color=](
[color=]self
.handle
[color=])
[color=]
temp = pynvml.nvmlDeviceGetTemperature
[color=](
[color=]self
.handle, pynvml.NVML_TEMPERATURE_GPU
[color=])
[color=]
power = pynvml.nvmlDeviceGetPowerUsage
[color=](
[color=]self
.handle
[color=])
/
[color=]1000
[color=]
power_limit = pynvml.nvmlDeviceGetEnforcedPowerLimit
[color=](
[color=]self
.handle
[color=])
/
[color=]1000
[color=]
pcie_tx =
[color=]round
[color=](
pynvml.nvmlDeviceGetPcieThroughput
[color=](
[color=]self
.handle, pynvml.NVML_PCIE_UTIL_TX_BYTES
[color=])
/
[color=]1024
,
[color=]4
[color=])
[color=]
pcie_rx =
[color=]round
[color=](
pynvml.nvmlDeviceGetPcieThroughput
[color=](
[color=]self
.handle, pynvml.NVML_PCIE_UTIL_RX_BYTES
[color=])
/
[color=]1024
,
[color=]4
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"timestamp"
.append
[color=](
now
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"mem_used"
.append
[color=](
mem.used /
[color=]1024
**
[color=]2
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"mem_total"
.append
[color=](
mem.total /
[color=]1024
**
[color=]2
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"gpu_util"
.append
[color=](
util.gpu
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"temp"
.append
[color=](
temp
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"power_usage"
.append
[color=](
power
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"power_limit"
.append
[color=](
power_limit
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"pcie_tx"
.append
[color=](
pcie_tx
[color=])
[color=]
[color=]self
.data
[color=][
[color=]"pcie_rx"
.append
[color=](
pcie_rx
[color=])
[color=]
[color=]
cutoff = now -
[color=]300
[color=]
[color=]while
[color=]self
.data
[color=][
[color=]"timestamp"
[color=]]
[color=]and
[color=]self
.data
[color=][
[color=]"timestamp"
[color=][
[color=]0
[color=]]
结语
后来发现是因为移动电脑会导致降频锁频30w,放着不动就没事儿。
这个工具送给有需要的人吧。
mon_nvidia.zip
(326.98 KB, 下载次数: 83)
2025-6-6 10:07 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB