问题描述
今天遇到这么一个问题:运行程序时候一直卡着不动
python preprocess.py
在服务器上是这样:
在本机电脑上也是这样:
我查看了一下显卡占用情况发现并无占用:
watch -n 1nvidia-smi
原因分析和解决
我先去问了一下GPT:
程序卡住不动可能是由于多种原因,如死循环、资源竞争或锁定、内存不足等。以下是一些排查和解决这种问题的方法:
1. 检查死循环和长时间运行的操作
- 确认程序中是否有可能进入死循环的代码。
- 确认是否有需要很长时间才能完成的操作,例如复杂的计算或大型数据的处理。
2. 使用调试器
调试器可以帮助你逐行检查代码,发现问题所在:
- 使用调试器(如
pdb
或 IDE 内置的调试工具)逐行运行代码,检查卡住的位置。- 设置断点,检查在卡住之前代码的状态和变量值。
3. 打印调试信息
在关键位置添加打印语句,检查程序的执行进度:
print("Checkpoint 1") # some code print("Checkpoint 2") # some code print("Checkpoint 3")
4. 使用超时控制
对于可能长时间运行的操作,添加超时控制:
import signal def handler(signum, frame): raise TimeoutError("Timeout") signal.signal(signal.SIGALRM, handler) signal.alarm(10) # 10秒后触发超时 try: # Your code here pass except TimeoutError: print("Operation timed out")
5. 检查资源使用
查看系统资源使用情况,检查是否有内存、CPU 或其他资源的瓶颈:
- 使用系统监控工具(如
top
或htop
)查看程序的资源使用情况。6. 使用多线程和多进程
如果程序使用多线程或多进程,检查是否有资源竞争或锁定问题:
- 确认是否有未正确释放的锁或资源。
- 确认没有死锁的发生。
7. 减少数据规模
如果处理的数据量很大,尝试减少数据规模,检查是否可以正常运行:
- 减少输入数据的规模,看看是否可以避免卡住的问题。
8. 检查外部依赖
如果你的程序依赖于外部库或服务,确认这些库或服务没有问题:
- 确认外部服务正常运行。
- 确认外部库没有已知的性能问题或 bug。
9. 更新或重装环境
更新或重新安装你的编程环境和依赖:
- 更新 Python 解释器和相关库到最新版本。
- 确认没有版本兼容性问题。
他给出的这些情况还是挺复杂的,当时也只是看到了“程序卡住不动可能是由于多种原因,如死循环、资源竞争或锁定、内存不足等。以下是一些排查和解决这种问题的方法”,就单纯的以为是程序的问题,放着没管,就在之后,我发现,原来不是这样的,因为第二天发现运行成功了,我就开始重新看这个报错!
1、单步调试卡在了,很可能是我的计算资源不够
eigenvalues, eigenvectors = eigsh(A=laplacian_matrix, k=1000, which="SA", tol=1e-5)
2、我并没有查看到任何使用显存的情况,那就是说很可能使用的是内存
用top命令查看一下,果然有这么个程序
再用htop命令查看一下果然如此,而且更清晰用的是这个程序
那到现在就清晰了,并不是卡在这里了,而是一直再计算,只是cpu计算太慢了,更何况我的是至强cpu呢Intel® Xeon(R) CPU E5-2623 v3 @ 3.00GHz × 16 !
相关链接
Python程序运行时卡住,既不报错,也不停止,是什么原因 – PingCodehttps://docs.pingcode.com/ask/64674.htmlpycharm 【Debug】过程卡住不动_debugpython代码,点击step into my code之后,卡住不动了-CSDN博客文章浏览阅读9.1k次,点赞49次,收藏44次。写在前面的话该文从知乎文章(Pycharm 常见问题汇总(updating))复制过来,只做学习记录,更多pycharm的问题请参考原文。debug时查看变量(variables)卡顿,读取缓慢,不显示 。 这种情况下你会发现单步调试也卡住了,看不到执行之后的情况。解决办法: 【File】 >>【Settings】 >>【Build, Execution, Deployment】>>【Python Debugger】 >> 勾选【Gevent compa_debugpython代码,点击step into my code之后,卡住不动了https://blog.csdn.net/weixin_42899627/article/details/120050107
完结撒花
兄弟们,新的一周了呀~