Python脚本长时间运行后崩溃。

7

我有一个在 Raspberry Pi 3 上运行的 Python 2.7 脚本。

class UIThread(threading.Thread):

   def __init__(self, threadID, name, counter, U):

    threading.Thread.__init__(self)

    self.threadID = threadID

    self.name = name

    self.counter = counter

    self.U = U

  def run(self):

    self.U.run()

def main():

  time.sleep(3)

  try:
     try:
         ###launch a UI running as background thread#####
         U = UIlib.UI()
         thread1 = UIThread(1, "UI", 1, U)
         thread1.daemon = True
         thread1.start()

     except:
         ###if there is no monitor, lanch a fake UI class#######
         U = UIlib.nomonitorUI()
         thread1 = UIThread(1, "NMUI", 1, U)
         thread1.daemon = True
         thread1.start()

         print "No Monitor detected"
         pass

    ####perform interaction with the BQ chip, contain a while true loop######
     char_balan(U)

  except:
    e = sys.exc_info()
    print e
    print "UI exit"

基本上它的功能是通过UART向芯片发送信息,获取响应信息,更新日志文件并将其打印到UI(由python curses创建的显示在监视器上的UI)中。 它每隔1秒执行一次。
该脚本没有错误,运行了32小时后崩溃。 UI崩溃并且覆盖了错误消息:“无法打开shsh:加载共享库时出错:libc.so.6:无法打开共享对象文件...” 我已经谷歌了这个消息,但没有找到与我的python脚本相关的任何内容。
我已经检查了树莓派的内存状态。 在第32小时,python进程使用了大约总内存的1/4。 因此,不是内存导致崩溃。 此外,我尝试过不使用监视器运行它,这将启动一个假的UI类而没有python.curses。 在第32小时发生了相同的崩溃。
现在,我不知道为什么脚本会崩溃。

@StevenRumbalski 是的,那是一个打字错误。 - flyblade
你使用的是哪个版本的 libc,还是 glibc - jmunsch
@jmunsch 我对此并不了解。我只是将一个Python脚本加载到一台安装了Rasabian的树莓派3上。而且我没有对Linux系统做任何操作。 - flyblade
每隔几个小时检查 lsof -i $PID 的输出,它是否打开了太多的文件描述符?错误退出代码号码是 24 吗? - jmunsch
你还遇到这个问题吗?你有jmunsch的问题的答案吗?我可以为你的问题添加赏金以引起关注,但我想确保你在场并能够回答问题。 - Steven Rumbalski
看起来提问者已经放弃了这个问题,并且没有回应评论中的澄清问题。 - Steven Rumbalski
1个回答

1
我有一堆8个树莓派作为种子盒。我遇到了同样的错误,我的一个树莓派开发者朋友给出的最近官方答案是一些旧内核与硬件存在不兼容的错误。更新到最新的Pixel版本可以解决您的问题。

谢谢您的建议。我通过改变程序结构解决了问题。虽然现在程序不会崩溃,但是运行速度变慢了很多。 - flyblade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接